[英]Updating sqlite database versions?
我有一個數據庫,我想添加一個列,我更改了靜態數據庫版本,但是當我在我的設備上運行程序時,新列仍然沒有,所以我猜我的onUpdate
沒有被調用,我不確定為什么。
這就是我創建數據庫的方式
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);");
}
}
還有什么我需要做的才能讓onUpdate
被調用嗎? 我嘗試了這個答案,但仍然沒有結果
為了在Android中升級數據庫,您應該將DATABASE_VERSION增加1,以便SQLOpenHelper知道它必須調用onUpgrade方法。
Rembember
這僅在您調用getWritableDatabase()時有效,否則將無法升級。 如果您更改版本並調用getReadableDatabase,它將顯示異常
throw new SQLiteException("Can't upgrade read-only database from version " +
db.getVersion() + " to " + mNewVersion + ": " + path);
但為什么? 你看到當你調用getWritableDatabase代碼時檢查版本是否相同:
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();
}
}
更新
事實證明它應該與getReadableDatabase()一起使用,因為在代碼中你總是得到一個WrittableDatabase。 所以它應該適用於這兩種方法,這里是getReadableDatabase()的文檔:
創建和/或打開數據庫。 這將是getWritableDatabase()返回的同一對象,除非某些問題(例如完整磁盤)要求以只讀方式打開數據庫。 在這種情況下,將返回只讀數據庫對象。 如果問題得到解決,將來可能會調用getWritableDatabase(),在這種情況下,將關閉只讀數據庫對象,並在將來返回讀/寫對象。
我建議你將DATABASE_VERSION
增加1,這將導致應用程序調用onUpgrade()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.