0
我目前正在使用一個SQLite數據庫的Android應用程序。Android SQLite OnUpgrade錯誤
首先,我想知道是否有適當的方式來升級基於新信息的SQLite數據庫。目前,我的信息存儲在一個文本文件中,數據庫的行數作爲第一行。我讀了第一行,看看數據庫中有多少行。如果文本文件中有更多行,則我升級數據庫並將所有內容重新添加到數據庫中。
這是目前我的代碼:
try {
InputStream is = getResources().getAssets().open("Questions");
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
AssistedMemDB db = new AssistedMemDB(this);
db.open();
int tempNum = db.getNumber();
String line = "";
line = reader.readLine();
if (Integer.decode(line) > tempNum) {
db.close();
db.upgrade();
db.open();
while ((line = reader.readLine()) != "") {
String list[] = line.split("\\<>");
db.createEntry(list[0], list[1]);
}
}
db.close();
} catch (IOException e) {
e.printStackTrace();
}
我收到一個錯誤說:
java.lang.IllegalStateException:嘗試重新打開已關閉的對象:SQLiteDatabase
預先感謝您!
雖然我遇到的問題是我從文本文件添加到數據庫中,因此我擁有文件中的所有信息。所以,當我向文件添加更多信息時,我只需更改文件頂部的數字,然後刪除所有行並重新添加它們。我相信有更好的方法來做到這一點,有什麼建議嗎? –
只需循環執行INSERT或IGNORE的所有行。如果它們不存在,將會添加行。或者,而不是分發巨大的文本文件只是分發差異(可能或不可行,取決於您的應用程序)。如果您確實需要刪除所有內容並進行讀取,則正確的方法是調用刪除表並重新創建它們,而不是嘗試執行onUpgrade - 該函數不打算從類似的用戶代碼中調用。 –
好的,這是有道理的。非常感謝Gabe Sechan。 INSERT或IGNORE會如下所示: 「INSERT OR IGNORE INTO TABLE ...」 –