Home Menu

Menu



Programación y Desarrollo para Android Subforo exclusivo para temas de programación de software para PDAs y desarrollo de aplicaciones, interfaces, etc bajo Android


 
Herramientas
  #1  
Viejo 01/04/19, 10:48:56
Avatar de kaiser75
kaiser75 kaiser75 no está en línea
Miembro del foro
Mensajes: 493
 
Fecha de registro: ene 2011
Mensajes: 493
Modelo de smartphone: Vernee Mars, Galaxy S3
Tu operador: Orange
Mencionado: 3 comentarios
Tagged: 0 hilos
interrogacion Actualizar la version de una base de datos SQlite.

Necesito actualizar una base de datos en una app ya publicada, esta tiene la version 1 y quiero actualizar a version 2 porque he añadido una columna a una tabla, cual es la manera correcta de hacerlo?.
Este es el codigo que tengo, no se si con "drop table if exists" basta para actualizar la tabla o hay que poner alguna condicion?. La tabla Nombres tiene las columnas "nombre" y "apellido", y necesito añadir la columna "direccion"
Código:
public static final int DB_VERSION = 2;
 @override
public void onCreate(SQLiteDatabase db) {
    db.execSQL(DbManager.TABLA_NOMBRES);
    Log.i(LOGTAG, "DbHelper onCreate");
}

[COLOR=#808000 @override
[/color]public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    Log.d(LOGTAG, "DbHelper onUpgrade");
    db.execSQL("DROP TABLE IF EXISTS " + DbManager.TABLA_NOMBRES);
}
Responder Con Cita


  #2  
Viejo 01/04/19, 22:00:47
Avatar de mocelet
mocelet mocelet no está en línea
Desarrollador
Mensajes: 2,203
 
Fecha de registro: may 2011
Localización: Madrid
Mensajes: 2,203
Tu operador: -
Mencionado: 17 comentarios
Tagged: 2 hilos
¡¡¡¡Si haces un drop borras todos los datos del usuario!!!

Lo que tienes es que actualizar la tabla para, conservando los datos, modificar la estructura. En este caso como es añadir un campo tendrás que usar el ALTER tabla ADD COLUMN y tendrás que especificar el tipo y valor por defecto que va a tomar el campo en todas las filas que no tienen ese valor.

Teniendo solo dos versiones, la 1 y la 2 tampoco te hace falta mucha estrategia. Pero si un día haces más cambios y subes a 3 entonces sí, porque igual un usuario actualiza la app a 3 sin pasar por 2.

La estrategia más sencilla es tener un método para cada nueva versión de la base de datos que sepa actualizar a partir de la versión inmediatamente anterior, por ejemplo actualiza1a2 y actualiza2a3. En el onUpgrade miras cuál es la versión antigua y vas llamando en orden a los métodos que actualizan hasta llegar a la versión actual. Por ejemplo, para pasar de 1 a 2 llamarías a actualiza1a2, para pasar de 2 a 3 llamarías a actualiza2a3, y en caso de que el usuario se haya saltado alguna actualización y tuviera que pasar de 1 a 3 llamarías a actualiza1a2 y seguidamente actualiza2a3.
Responder Con Cita
Gracias de parte de:
  #3  
Viejo 02/04/19, 10:34:17
Avatar de kaiser75
kaiser75 kaiser75 no está en línea
Miembro del foro
Mensajes: 493
 
Fecha de registro: ene 2011
Mensajes: 493
Modelo de smartphone: Vernee Mars, Galaxy S3
Tu operador: Orange
Mencionado: 3 comentarios
Tagged: 0 hilos
Gracias mocelet por la informacion, bueno la base de datos es de solo lectura para mostrar informacion (desde carpeta assets), es igual si se borran los datos al hacer un "drop" el usuario no introduce ningun dato, los proporciona la app. He probado con el primer codigo que puse y efectivamente me borra la tabla "nombres" y despues me la vuelve a generar con los mismos datos de la nueva version. Aunque solo con dos versiones (1 y 2) supongo que es facil, con mas versiones ya deberia hacer algo como la logica que comentas no?.


Por ejemplo para añadir el campo direccion a la version 1 serviria algo asi?
Código:
public static String DB_UPDATE2 = "ALTER TABLE " + TABLA_NOMBRES
             + " ADD COLUMN " + COL_DIRECCION + " string;";


Y en onUpgrade añadir las condiciones para cada version:
if (oldVersion < 2){
   ...DB_UPDATE2 ...
  }

if (oldVersion < 3){
   ...DB_UPDATE3 ...
}

... etc
Responder Con Cita
Respuesta

Estás aquí
Regresar   HTCMania > Todo sobre Android > Programación y Desarrollo para Android


Reglas de Mensajes
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Las caritas están On
Código [IMG] está On
Código HTML está Off

Saltar a Foro



Hora actual: 09:03:23 (GMT +1)

Cookies
Powered by vBulletin™
Copyright © vBulletin Solutions, Inc. All rights reserved.
 
HTCMania: líderes desde el 2007