Actualización de versiones de base de datos sqlite?
Tengo una base de datos a la que quiero añadir una columna, he cambiado la versión de la base de datos estática, pero cuando ejecuto el programa en mi dispositivo de la nueva columna todavía no está allí por lo que estoy adivinando mi onUpdate
no se llama y no estoy seguro por qué.
Así es como creo la base de datos
- Android cómo actualizar, pero conserva la información de la base de datos
- Ordenar los datos de la base de datos y mostrarlos en la vista de lista
- Cómo personalizar FTS tokenizer en Android
- No se puede cerrar debido a declaraciones sin finalizar Android
- Seleccione un primer carácter distinto basado en la columna de cadena
private static class DatabaseHelper extends SQLiteOpenHelper { DatabaseHelper(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); } @Override public void onCreate(SQLiteDatabase db) { createTables(db); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { Log.w("CalendarDB", "Upgrading database from version " + oldVersion + " to " + newVersion + ", which will destroy all old data"); db.execSQL("DROP TABLE IF EXISTS Events_Table"); onCreate(db); } private void createTables(SQLiteDatabase db){ db.execSQL("CREATE TABLE " + EVENTS_TABLE + "(" + ID + " integer primary key autoincrement, " + EVENT + " TEXT, " + LOCATION + " TEXT, " + DESCRIPTION + " TEXT, " + DATE + " TEXT, " + START + " LONG, " + END + " TEXT, " + REAL_START_TIME + " TEXT," + REAL_END_TIME + " TEXT," + COLOR + " TEXT, " + BLINK + " TEXT, " + VIBRATE + " TEXT, " + RING_TONE_PATH + " TEXT, " + ICON + " TEXT, " + REMINDERS + " TEXT, " + START_WITH_REMINDER + " TEXT, " + CALENDAR_ID + " TEXT, " + EVENT_ID + " TEXT);"); } }
¿Hay algo más que tengo que hacer para obtener el onUpdate
para ser llamado? Traté de seguir esta respuesta pero todavía no hay resultado
- ¿La implementación de SQLite de Android desinfecta la entrada a través del método SQLiteDatabase.insert ()?
- Cómo organizar mejor mi clase de base de datos SQLite en Android
- Cómo eliminar las viejas filas de la base de datos sqlite en android?
- Integración ormlite-4.9 con sqlcipher-2.08
- Arrastrar y soltar RecyclerView que se rellena desde SQLiteDatabase
- SQLiteDatabase.openDatabase vs SQLiteOpenHelper.getReadableDatabase
- Inspeccionar la base de datos android de sql desde Eclipse
- SQLiteDatabase transacción anidada y solución alternativa
Para actualizar la base de datos en Android, debe incrementar la DATABASE_VERSION en uno, para que el SQLOpenHelper sepa que debe llamarse el método onUpgrade.
Recuerdo
Esto sólo funciona cuando llama a getWritableDatabase () de lo contrario no se actualizará. Y si cambia la versión y llama a getReadableDatabase mostrará una excepción
throw new SQLiteException("Can't upgrade read-only database from version " + db.getVersion() + " to " + mNewVersion + ": " + path);
¿Pero por qué? Verá cuando llame a getWritableDatabase el código compruebe si la versión es la misma:
if (version != mNewVersion) { db.beginTransaction(); try { if (version == 0) { onCreate(db); } else { if (version > mNewVersion) { onDowngrade(db, version, mNewVersion); } else { onUpgrade(db, version, mNewVersion); } } db.setVersion(mNewVersion); db.setTransactionSuccessful(); } finally { db.endTransaction(); } }
Actualizar
Bueno resulta que debería funcionar con getReadableDatabase () ya que en el código siempre obtiene un WrittableDatabase también. Así que debería funcionar con ambos métodos, aquí está la documentación de getReadableDatabase ():
Crear y / o abrir una base de datos. Este será el mismo objeto devuelto por getWritableDatabase () a menos que algún problema, como un disco completo, requiera que la base de datos se abra en modo de sólo lectura. En ese caso, se devolverá un objeto de base de datos de sólo lectura. Si el problema es fijo, una llamada futura a getWritableDatabase () puede tener éxito, en cuyo caso el objeto de base de datos de sólo lectura se cerrará y el objeto de lectura / escritura se devolverá en el futuro.
Le sugiero que incremente DATABASE_VERSION
por uno, que llevará a la aplicación a llamar a onUpgrade ()
- ImageView 9 patch con líneas de relleno no respetadas
- Acaba de instalar Windows 10 y Eclipse ya no se inicia