SQLite
 sql >> Database >  >> RDS >> SQLite

inizializzare un database sqlite Android

Le altre risposte non sembravano rispondere a come popolare effettivamente il database con i valori iniziali, quindi condividerò come l'ho fatto qui.

Fondamentalmente salvi le colonne del database come array di stringhe in un file xml. Mostrerò solo un array ma potresti fare di più per altre colonne. (Dovresti fare attenzione, tuttavia, con più colonne per non incasinare l'ordine dell'array e quindi incasinare le righe del database.)

Crea un file /res/values/arrays.xml e aggiungi l'array.

<?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>

Quindi puoi ottenere quell'array quando crei il database nella tua classe helper. Ecco cosa ho fatto:

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);

    }
}

Vedi questi link per ulteriore assistenza:

  • Risorse per le stringhe - Documenti per gli array di stringhe
  • Android:riempimento di una tabella da un file di risorse utilizzando l'array di stringhe (SQLite)

Un'altra cosa che ho fatto è creare i database in anticipo e quindi copiarli nella cartella del database quando l'app è installata. Potrebbe funzionare meglio se si dispone di una grande quantità di dati e non si desidera scaricare il database da Internet. Se vuoi copiare il tuo database, guarda questa risposta.