2010-03-09 12 views
26

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.Base de datos prepoblada de Android

+0

http://stackoverflow.com/a/9109728/265167 –

+1

no quiero para publicar esto como una respuesta porque no es verdad. Considere escribir Java para compilar la base de datos _en Android_ (por ejemplo, desde archivos CSV insertados con ADB). Luego comprimirlo en '/ assets' para instalarlo. Tratar de coincidir exactamente con lo que Android espera en un entorno que no sea de Android resultó ser un paso de construcción frágil. – Gene

+0

@ JonDiY212 HTML incorrecto en su enlace. – Noumenon

Respuesta

17

Este enlace tiene buena respuesta Ship an application with a database

+4

Aquí está el enlace que se presenta como Mejor respuesta en la pregunta de SO a la que hace referencia Andrey. Es un excelente artículo sobre la distribución de una base de datos preconstruida con su aplicación Android: http://www.reigndesign.com/blog/using-your-own-sqlite-database-in-android-applications/ –

+0

Similar pero más breve : http://www.helloandroid.com/tutorials/how-have-default-database –

+0

http: // stackoverflow.com/preguntas/9109438 /-Ya-creados usando la base de datos-con-android-/ 9109728 # 9109728 –

3

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 soportada por el propio sistema operativo.

esperanza esto fue de alguna ayuda :-)

+1

El límite de tamaño es de 1 MB. –

1

JavaDoc de SQLiteOpenHelper:

una clase de ayuda para gestionar la base de datos creación y gestión de versiones. Usted crear una subclase implementar onCreate (SQLiteDatabase), ONUPGRADE (SQLiteDatabase, int, int) y opcionalmente onOpen (SQLiteDatabase), y esta clase se encarga de la apertura la base de datos si es que existe, crearlo si lo hace no, y actualizándolo como necesario. Las transacciones se usan en , asegúrese de 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 las muestras/ directorio del SDK.

Si amplía esta clase, tiene 3 métodos que se llamarán en algunos casos y puede elegir qué hacer. Eso es la mejor práctica :)

2

Aquí está un ejemplo de cómo crear y llenar una base de datos, sólo se puede hacer esto en la instalación de la aplicación, esto sólo crea una entrada, aunque por lo que puede ser ineficiente para lo que quiere 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 
} 
+0

Una explicación para el voto por favor? –

+0

¿Cómo puedo hacer esto 'en la instalación de la aplicación?' ¿Esta parte del código se ejecuta solo en la instalación? –

Cuestiones relacionadas