首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用提供的数据库使用SQLite进行onUpgrade时更新特定表

使用提供的数据库使用SQLite进行onUpgrade时更新特定表
EN

Stack Overflow用户
提问于 2015-09-17 21:17:58
回答 2查看 528关注 0票数 0

也许这里有我的问题的答案,但如果它存在,我找不到它。这是我的问题:我在assets文件夹中提供了数据库。当我想要更新我的应用程序时,因为我在特定表中放了更多的行,我增加了db版本,调用this.getWritableDatabase();然后调用onUpgrade,到目前为止一切都好了。但是下一步呢?下面是我的onUpgrade函数:

代码语言:javascript
复制
@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();
}

这会给我一个错误,我的数据库被锁定了-在行上:

代码语言:javascript
复制
db.execSQL("INSERT INTO GAME SELECT * FROM newdb.GAME");

我试了很多不同的scenarious,但我就是做不到。如果有人能帮我使它工作,我将非常高兴;)

EN

回答 2

Stack Overflow用户

发布于 2015-09-17 23:04:33

如果你的onUpgrade没有使用它的第一个参数,它就会出错。

dbnewdb是同一个数据库(都是用DB_PATH + DB_NAME打开的)。

您可能想用sqLiteDatabase替换db

票数 0
EN

Stack Overflow用户

发布于 2015-09-17 23:13:52

onUpgrade意味着你想升级你的数据库,而不是把一些数据从旧的复制到新的。此方法为您提供了升级所需的所有内容- db实例为特定版本滚动升级脚本。SQL是非常强大的,你可以添加/删除列,删除表等等,所以我看不出有什么理由去创建另一个文件。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32631300

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档