sql >> Database >  >> RDS >> SQLite

initialiseer een sqlite-database android

De andere antwoorden leken niet te beantwoorden hoe de database daadwerkelijk met initiële waarden moest worden gevuld, dus ik zal hier delen hoe ik het deed.

In principe slaat u uw databasekolommen op als tekenreeksarrays in een xml-bestand. Ik zal slechts één array laten zien, maar je zou meer kunnen doen voor andere kolommen. (Je zou echter voorzichtig moeten zijn met meerdere kolommen om de array-volgorde niet te verknoeien, en dus je databaserijen te verknoeien.)

Maak een bestand /res/values/arrays.xml en voeg de array eraan toe.

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <string-array name="my_array">

            <item>string 1</item>
            <item>string 2</item>
            <item>string 3</item>
            <item>string 4</item>
            <item>string 5</item>

    </string-array>

</resources>

Dan kunt u die array krijgen wanneer u de database in uw helperklasse maakt. Dit is wat ik deed:

private static class DatabaseHelper extends SQLiteOpenHelper {

    private final Context fContext;

    // constructor
    DatabaseHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
        fContext = context;
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL("CREATE TABLE " + TABLE_NAME + " ("
                + FIRST_COLUMN + " INTEGER PRIMARY KEY,"
                + SECOND_COLUMN + " TEXT NOT NULL,"
                + THIRD_COLUMN + " INTEGER,"
                + FOURTH_COLUMN + " TEXT NOT NULL"
                + ");");

        // Initialize the db with values from my_array.xml
        final int DEFAULT_THIRD_COLUMN = 1;
        final String DEFAULT_FOURTH_COLUMN = "";
        ContentValues values = new ContentValues();
        Resources res = fContext.getResources();
        String[] myArray = res.getStringArray(R.array.my_array);
        for (String item : myArray){
            values.put(SECOND_COLUMN, item);
            values.put(THIRD_COLUMN, DEFAULT_THIRD_COLUMN);
            values.put(FOURTH_COLUMN, DEFAULT_FOURTH_COLUMN);
            db.insert(TABLE_NAME, null, values);
        }
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

        Log.w(TAG, "Upgrading database from version " + oldVersion + " to "
                + newVersion + ", which will destroy all old data");
        db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
        onCreate(db);

    }
}

Zie deze links voor meer hulp:

  • String-bronnen - String-array-documenten
  • Android:een tabel vullen vanuit het bronbestand met behulp van stringarray (SQLite)

Een ander ding dat ik heb gedaan, is de databases van tevoren maken en deze vervolgens naar de databasemap kopiëren wanneer de app is geïnstalleerd. Dat kan beter werken als u een grote hoeveelheid gegevens heeft en u de database niet van internet wilt downloaden. Als je je database wilt kopiëren, zie dan dit antwoord.



  1. PostgreSQL Zoeken in volledige tekst en verwarring over trigrammen

  2. Besparingen op gegevenscompressie in SQL Server schatten

  3. Stel de tekenset en sortering van een tabel in MariaDB in

  4. Hoe dynamische kolomnamen te gebruiken in een UPDATE- of SELECT-instructie in een functie?