sql >> Base de Datos >  >> RDS >> SQLite

inicializar una base de datos sqlite android

Las otras respuestas no parecían responder cómo llenar la base de datos con valores iniciales, así que compartiré cómo lo hice aquí.

Básicamente, guarda las columnas de su base de datos como matrices de cadenas en un archivo xml. Solo mostraré una matriz, pero podría hacer más para otras columnas. (Sin embargo, debe tener cuidado con varias columnas para no alterar el orden de la matriz y, por lo tanto, alterar las filas de la base de datos).

Cree un archivo /res/values/arrays.xml y agréguele la matriz.

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

Luego puede obtener esa matriz cuando crea la base de datos en su clase auxiliar. Esto es lo que hice:

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

    }
}

Consulte estos enlaces para obtener más ayuda:

  • Recursos de cadenas - Documentos de matriz de cadenas
  • Android:llenar una tabla desde un archivo de recursos usando una matriz de cadenas (SQLite)

Otra cosa que he hecho es crear las bases de datos con anticipación y luego simplemente copiarlas en la carpeta de la base de datos cuando se instala la aplicación. Eso puede funcionar mejor si tiene una gran cantidad de datos y no desea descargar la base de datos de Internet. Si desea copiar su base de datos, consulte esta respuesta.