也许这里有我的问题的答案,但如果它存在,我找不到它。这是我的问题:我在assets文件夹中提供了数据库。当我想要更新我的应用程序时,因为我在特定表中放了更多的行,我增加了db版本,调用this.getWritableDatabase();然后调用onUpgrade,到目前为止一切都好了。但是下一步呢?下面是我的onUpgrade函数:
@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i2) {
if(i < i2) {
SQLiteDatabase db = SQLiteDatabase.openDatabase(DB_PATH + DB_NAME, null,SQLiteDatabase.OPEN_READWRITE);
db.execSQL("attach database ? as newdb", new String[]{DB_PATH + DB_NAME}); // I have to attach new version of db to the old one and then i can go on
db.execSQL("delete from GAME");
db.execSQL("INSERT INTO GAME SELECT * FROM newdb.GAME");
db.close();
}这会给我一个错误,我的数据库被锁定了-在行上:
db.execSQL("INSERT INTO GAME SELECT * FROM newdb.GAME");我试了很多不同的scenarious,但我就是做不到。如果有人能帮我使它工作,我将非常高兴;)
发布于 2015-09-17 23:04:33
如果你的onUpgrade没有使用它的第一个参数,它就会出错。
db和newdb是同一个数据库(都是用DB_PATH + DB_NAME打开的)。
您可能想用sqLiteDatabase替换db。
https://stackoverflow.com/questions/32631300
复制相似问题