SQLite
 sql >> Base de données >  >> RDS >> SQLite

initialiser une base de données sqlite android

Les autres réponses ne semblaient pas répondre à la question de savoir comment remplir réellement la base de données avec des valeurs initiales, je vais donc partager comment je l'ai fait ici.

Fondamentalement, vous enregistrez vos colonnes de base de données sous forme de tableaux de chaînes dans un fichier xml. Je vais juste montrer un tableau mais vous pourriez faire plus pour d'autres colonnes. (Vous devez faire attention, cependant, avec plusieurs colonnes pour ne pas gâcher l'ordre du tableau, et donc gâcher les lignes de votre base de données.)

Créez un fichier /res/values/arrays.xml et ajoutez-y le tableau.

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

Ensuite, vous pouvez obtenir ce tableau lorsque vous créez la base de données dans votre classe d'assistance. Voici ce que j'ai fait :

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

    }
}

Consultez ces liens pour obtenir de l'aide :

  • Ressources sur les chaînes – Documentation sur les tableaux de chaînes
  • Android :Remplir une table à partir d'un fichier de ressources à l'aide d'un tableau de chaînes (SQLite)

Une autre chose que j'ai faite est de créer les bases de données à l'avance, puis de les copier dans le dossier de la base de données lorsque l'application est installée. Cela peut mieux fonctionner si vous disposez d'une grande quantité de données et que vous ne souhaitez pas télécharger la base de données depuis Internet. Si vous souhaitez copier votre base de données, consultez cette réponse.