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

  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

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 ()

  • ¿El cursor SQLite de Android carga todos los registros en la memoria a la vez?
  • sqlite Android - cómo obtener el valor de col / fila específica
  • No se pudo recuperar datos de la base de datos a listview.
  • SQLite de Android - Cursor y ContentValues
  • La actualización de SQLite de Android no funciona
  • Android cadena de escape real en sqlite
  • DETALLES DE EXCEPCIÓN: java.lang.IllegalStateException: Proceso 3188 Cuota de cursor excedido 100, lo matará con Rom MIUI
  • java.lang.IllegalStateException: getWritableDatabase llamado recursivamente
  • Varios Table SQLite DB Adapter (s) en Android?
  • Cómo insertar valor nulo en Sqlite con SQLiteStatement
  • SQLite LIKE alternativa para REGEXP, Match Start de cualquier palabra
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.