也许这里有我的问题的答案,但如果它存在,我找不到它。这是我的问题:我在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。
发布于 2015-09-17 23:13:52
onUpgrade意味着你想升级你的数据库,而不是把一些数据从旧的复制到新的。此方法为您提供了升级所需的所有内容- db实例为特定版本滚动升级脚本。SQL是非常强大的,你可以添加/删除列,删除表等等,所以我看不出有什么理由去创建另一个文件。
https://stackoverflow.com/questions/32631300
复制相似问题