2010-01-19 21 views
6

¿Alguien me puede decir cómo actualizar la base de datos en Android. Creé una aplicación con una base de datos integrada. Cambié la versión de la base de datos en el manifiesto y creé el método de actualización. Quería probarlo para ver si la base de datos se actualizaba correctamente, pero cuando uso el comando adb, solo -r me permitirá hacer una reinstalación, pero mantiene la base de datos. ¿Hay alguna forma de ejecutar el comando adb que me permita actualizar la base de datos? Gracias.Actualizar la base de datos Android

Respuesta

2

Tener un vistazo a los siguientes recursos y ver si son útiles:

deliciosas Marcadores
http://delicious.com/tag/android+adb
http://delicious.com/tag/android+database

DevX: Creación y uso de bases de datos en Android
http://www.devx.com/wireless/Article/40842

Aprender Android: Programación de base de datos
http://learnandroid.blogspot.com/2008/01/android-database.html

Android Resumen Base de datos del paquete
http://developer.android.com/reference/android/database/package-summary.html

+0

gracias por los enlaces, pero no vi nada que hablara de hacer una reinstalación adb y actualizar la base de datos. Es posible hacer esto, mi aplicación crea esa base de datos bien la primera vez, pero solo durante las actualizaciones es cuando se bloquea. ¿Hay una entrada manifiesta que necesito ingresar? – user237259

+0

No importa, me enteré de lo que estaba haciendo mal, después de algunas investigaciones descubrí que no estaba soltando la mesa correctamente y cuando volvería a crear la tabla, se equivocaría. Terminé dejando caer la tabla correctamente y, en lugar de llamar al comando oncreate, escribí una consulta para recrear la tabla en el método onupdate. – user237259

+0

Creo que sería más constructivo si ofrecieras ejemplos en lugar de un grupo de enlaces (no relacionados). –

3

Lo que funcionó para mí está cambiando el número de versión de la base de datos. Este es el número constante que usa el método onCreate() de su proveedor de contenido. Algo similar funciona si no utiliza un proveedor de contenido para su base de datos y lo consulta directamente. Vea el ejemplo del código fuente here.

+0

Esta publicación de blog explica un poco los conceptos básicos de cómo Android actualiza la base de datos - http://www.unwesen.de/2009/09/07/android-development-database-upgrades/2/ – r1k0

1

Lo que funcionó para mí es cambiar el parámetro de número de versión que proporciono a la clase DBOpenHelper que amplía el SQLiteOpenHelper (la clase utilizada para crear/leer/escribir/etc ... la base de datos de Android). Cuando se incrementa el parámetro de número de versión, la función onUpdate() se llama una vez para el nuevo valor de este parámetro.

7

Aquí es cómo iba a manejar mi método updateRow:

public void updateRow(long rowId, String code, String name) { 
     ContentValues args = new ContentValues(); 
     args.put("code", code); 
     args.put("name", name); 
     db.update(DATABASE_TABLE, args, "_id=" + rowId, null); 
} 
+1

¿Hay alguna manera de hacerlo? para múltiples filas simultáneamente, en lugar de llamar 'update' para cada una? – Gaffi

1

Si mediante la actualización que suponer la remodelación (como yo durante el desarrollo cuando quiero comenzar con una base de datos actualizada cada vez que se inicia mi solicitud) y luego añadir este código antes de acceder a la base de datos de la aplicación:

this.getContext().getApplicationContext().deleteDatabase(DATABASENAME); 

O

Búsqueda t que camino a su base de datos:

SQLiteHelper sql_database_helper = new SQLiteHelper(this.getContext().getApplicationContext()); 
File dbFile = getDatabasePath(DATABASENAME); 
Log.v("XIX","DB FILE PATH:"+dbFile.getAbsolutePath()); 

continuación, elimine la base de datos desde la línea de comandos:

> adb devices 
List of devices attached 
3246%$%^$&17 device 
> adb shell 
$ su 
su 
rm mydatapath 

NOTA: Puede no ser capaz de acceder al comando su sin que se agriete su teléfono

Explicación : Si no desea seguir los consejos de r1k0 (que probablemente sea la forma correcta de hacerlo si está actualizando una aplicación ya lanzada), puede eliminar la base de datos con los siguientes comandos de adb y un restar t de su aplicación llamará nuevamente al método onCreate.

1

no aconsejo utilizar de esta manera:

public void updateRow(long rowId, String code, String name) { 
     ContentValues args = new ContentValues(); 
     args.put("code", code); 
     args.put("name", name); 
     db.update(DATABASE_TABLE, args, "_id=" + rowId, null); 
} 

Su aplicación va a ser vulnerables a los ataques de inyección SQL, la mejor manera de hacer esto es algo como esto:

public void updateRow(long rowId, String code, String name) { 
     ContentValues args = new ContentValues(); 
     args.put("code", code); 
     args.put("name", name); 
     String whereArgs[] = new String[1]; 
     whereArgs[0] = "" + rowId; 
     db.update(DATABASE_TABLE, args, "_id= ?", whereArgs); 
} 
Cuestiones relacionadas