2011-03-04 21 views
9

Voy a agregar una tabla a la base de datos SQLite de mi aplicación. Toda mi sintaxis está bien, no el problema. Pero estoy teniendo problemas para que la nueva tabla se cree correctamente. Agregué la nueva tabla ...¿Cómo actualizar una base de datos SQLite y NO perder todos los datos existentes?

@Override 
     public void onCreate(SQLiteDatabase db) { 
      db.execSQL(DATABASE_CREATE); 
      db.execSQL(CREATE_REQUESTS); 
      db.execSQL(CREATE_OVERRIDE); 
     } 

Método My on create. Tengo 3 tablas. Cuando actualicé el número de versión, recibí un mensaje de error que decía "ya se han creado las solicitudes de tabla (haciendo referencia a CREATE_REQUESTS)". Una mirada a mi método ONUPGRADE ...

@Override 
     public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
      db.execSQL("DROP TABLE IF EXISTS contacts"); 
      onCreate(db); 
     } 

me llevó a entender que la línea db.execSQL("DROP TABLE IF EXISTS contacts"), que se refiere a mi mesa DATABASE_CREATE en el método onCreate, se utiliza para eliminar la tabla de edad, entonces la línea siguiente, onCreate(db); lo recrea No agregué solicitudes en esa línea execSQL, que es la causa del error. Aquí está el problema: preferiría no perder los datos en las dos tablas que ya tengo. ¿Hay alguna manera de agregar una tabla como lo estoy intentando hacer, y no perder todos los datos antiguos? Gracias.

Respuesta

12

Puede hacer lo que quiera en onUpgrade. Puede usar ALTER para agregar nuevas columnas a su tabla.

En el peor de los casos, si su esquema es completa y completamente diferente, tendrá que crear la nueva tabla, rellenarla con los datos de la tabla anterior y luego eliminar la tabla anterior.

En cualquier caso, onUpgrade fue diseñado para permitir una actualización sin problemas y sin pérdida de datos. Depende de usted implementarlo correctamente.

+0

Hm, OK. Supongo que mi preocupación es que si lo hiciste en Ongrade no se crearía cuando alguien use la aplicación desde cero, pero supongo que siempre que lo ponga en el método onCreate no es gran cosa. ¡Gracias! – JMRboosties

+0

onUpgrade solo se llama si se actualiza una aplicación existente. Si inicia la aplicación desde cero, solo recibirá una llamada a onCreate. – EboMike

+4

Se llama solo cuando se incrementa la versión de la base de datos. –

0

si la versión DB: 6

Ex : There is a table with 5 columns 

Cuando se actualiza a: 7 (añado 1 nueva columna en las 3 mesas)

1. We need to add the columns when creating a table 

2. onUpgrade method: 

if (oldVersion < 7) 
{ 
    db.execSQL(DATABASE_ALTER_ADD_PAPER_PAID); 
    db.execSQL(DATABASE_ALTER_LAST_UPLOADED); 
    db.execSQL(DATABASE_ALTER_PAPER_LABEL); 
} 

Donde: "DATABASE_ALTER_ADD_PAPER_PAID" es consulta.

EX: public static final String DATABASE_ALTER_ADD_PAPER_PAID = "ALTER TABLE " 
       + TableConstants.MY_PAPERS_TABLE + " ADD COLUMN " + COLUMN_PAPER_PAID + " TEXT;"; 

Después de dos por encima de la operación que se trabaja muy bien para la nueva instalación de actualización de aplicaciones de usuario y el usuario

Cuestiones relacionadas