2013-02-22 184 views
3

任何人都可以幫助我解決在我的代碼中發生的這種異常嗎?無法將數據庫從版本2降級到1

02-10 17:16:32.406: E/AndroidRuntime(8619): android.database.sqlite.SQLiteException: Can't downgrade database from version 2 to 1 

我被困在這裏。我應該真的關心這個「數據庫版本」的事情嗎?

+0

似乎你在這裏有一個很好的答案。請接受它,如果正確。 – Gray 2013-03-18 13:10:24

回答

9

假設您使用的是Android SQLiteOpenHelper,如果您希望能夠在您的代碼可以處理的版本高於設備的數據庫上運行應用程序,則需要覆蓋onDowngrade

如果您的數據庫架構不斷髮生變化(一般來說,它很有可能),您應該關心這個「數據庫版本的事情」。

+4

關於onDowngrade請注意:如果不重寫,默認實現將拒絕降級並拋出SQLiteException – 2013-11-25 08:28:11

+0

通常在'onDowngrade()中執行什麼操作? – 2015-02-18 22:07:22

0

檢查數據庫SqliteOpenHelper構造它的最後放慢參數應該是相同的,如果你使用的不是SQLitehelper更像ORM

0

我試圖SQLite的版本1更改爲2,因爲我不得不加大版,增加了一個新列到我的表(更改)。它工作得很好。然後,爲了好玩我試圖改變2比1象下面這樣:

來源:

public DatabaseHelper(Context context) {super(context, DB_NAME, null, 2);} 

要:

public DatabaseHelper(Context context) {super(context, DB_NAME, null, 1);} 

然後我得到這個:

FATAL EXCEPTION: main 
               Process: com.example.android.vocab, PID: 3360 
               android.database.sqlite.SQLiteException: Can't downgrade database from version 2 to 1 

正如我之前解釋過,我們不能在增加後減少SQLite版本。所以,你需要變回2或大於2

public DatabaseHelper(Context context) { 
    super(context, DB_NAME, null, 2); 
} 

如果你想更新表格,可能需要通過你需要更新表32和每一次,你需要增加版本(不減少)

如果你真的想降級版本,你可以覆蓋@Matthieu在他的回答中表達的onDowngrade()