Base de datos pre-poblada de Android

Estoy trabajando en una aplicación de Android que necesitará varias entradas (una sola tabla, con 1000-10000 filas) pobladas en la base de datos de esa aplicación antes de que el usuario pueda usar esa aplicación. He buscado algunos tutoriales y no estoy seguro de cuál es la mejor manera de hacerlo. ¿Debo verificar si la base de datos existe cada vez que se inicia la aplicación y, si no está allí, crearla e insertar los miles de registros que necesito? ¿O hay una mejor manera de manejar este problema? Idealmente, podría incluirse como parte del proceso de instalación de la aplicación, pero no estoy seguro si esto es posible. Cualquier comentario sería muy apreciado.

Este enlace tiene una buena respuesta Enviar una aplicación con una base de datos

la forma en que voy aquí es enviar una base de datos prepoblada en la carpeta de activos. Puede colocar allí archivos y usarlos tal como están. Tenga en cuenta, sin embargo, que hay un límite de tamaño de 1 MB, por lo que tal vez tendrá que dividir archivos o comprimirlos.

La compresión es bastante práctica y está bien respaldada por el propio sistema operativo.

Espero que esto sea de alguna ayuda 🙂

Aquí hay un ejemplo de cómo crear y completar una base de datos, puede hacer esto en la instalación de la aplicación, esto solo crea una entrada, por lo que puede ser ineficiente para lo que desea hacer.

 private static class settingsDatabaseHelper extends SQLiteOpenHelper{ //SQL String for creating the table required private static final String CREATE_SETTINGS_TABLE = "CREATE TABLE tbl_settings(" + "_ID INTEGER PRIMARY KEY AUTOINCREMENT," + "VOIPUSERNAME TEXT," + "VOIPAUTHID TEXT," + "PASSWORD TEXT," + "VOIPDISPLAYNAME TEXT," + "SIPPROXYSERVER TEXT," + "SIPREGISTRAR TEXT," + "SIPREALM TEXT," + "EXPIRESTIME INTEGER);"; //constructor public settingsDatabaseHelper(Context context, String name, CursorFactory factory, int version) { super(context, name, factory, version); } @Override public void onCreate(SQLiteDatabase db) { db.execSQL(CREATE_SETTINGS_TABLE); ContentValues initialValues = new ContentValues(); initialValues.put("VOIPUSERNAME", "xxxxx"); initialValues.put("VOIPAUTHID", "xxxxxxxxxx"); initialValues.put("PASSWORD", "xxxxxx"); initialValues.put("VOIPDISPLAYNAME", "xxxxxxxxx"); initialValues.put("SIPPROXYSERVER", "xxxxxxxxxxxxx"); initialValues.put("SIPREGISTRAR", "xxxxxxxxxxx"); initialValues.put("SIPREALM", "xxxxxxxxxx"); initialValues.put("EXPIRESTIME", xxxxxxxxxxx); Log.d("1.6", "gets to here"); db.insert(SETTINGS_TABLE, null, initialValues); } @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 " + SETTINGS_TABLE); onCreate(db); } } //end helper class } 

JavaDoc de SQLiteOpenHelper:

Una clase de ayuda para gestionar la creación de bases de datos y la administración de versiones. Se crea una subclase que implementa onCreate (SQLiteDatabase), onUpgrade (SQLiteDatabase, int, int) y opcionalmente onOpen (SQLiteDatabase), y esta clase se encarga de abrir la base de datos si existe, crearla si no es así y actualizarla según sea necesario. . Las transacciones se utilizan para garantizar que la base de datos esté siempre en un estado sensible.

Para ver un ejemplo, consulte la clase NotePadProvider en la aplicación de ejemplo NotePad, en el directorio samples / del SDK.

Por lo tanto, si extiende esta clase, tiene 3 métodos que se llamarán en algunos casos y puede elegir, para qué sirve. Esa es la mejor práctica 🙂