更新预加载的sqlite数据库而不会丢失android中的用户数据

时间:2015-03-09 11:20:43

标签: android database sqlite sql-update

我已经完成了一些搜索并阅读了一些帖子但是我仍然没有成功尝试更新数据库而不会丢失已保存的数据。

我使用本教程创建了数据库:http://www.reigndesign.com/blog/using-your-own-sqlite-database-in-android-applications/

在新数据库中,我想将数据从主表迁移到将存储用户收藏夹的新表。目前,它们存储在主表中。在onupgrade函数中,我尝试重命名表并将记录插入新表中。那不行。我也尝试将数据保存到游标,然后填充新表,但这不起作用。对于这些方法,我得到错误,说无法找到新/旧表。

下面是onUpgrade()函数。

public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

    if (newVersion > oldVersion) {
      db.execSQL("ALTER TABLE books rename to old_books");


        try {
            copyDataBase();

        } catch (IOException e) {
            throw new Error("Error copying database");

        }


    db.execSQL("INSERT into favourites (_id, type, title, notes,rating)   SELECT _id ,type, title, notes, rating FROM old_books where rating > 0;");
    db.execSQL("DROP TABLE IF EXISTS old_books;");
    }
}

使用本教程中的实现,是否有更好的方法来更新数据库而不会丢失数据?我需要做的就是复制“#34;书籍”中的收藏夹。表并加载到"收藏夹"用户更新应用时的表格。

2 个答案:

答案 0 :(得分:0)

在数据库打开且事务处于活动状态时调用

onUpgrade。 您目前无法覆盖数据库文件(这会丢失旧文件中的所有数据)。

只需删除copyDataBase()来电。

答案 1 :(得分:0)

如果您使用SQLite浏览器来获取预加载的数据库,那么您可以更新数据库文件,然后更改它的版本而不是创建新的数据库文件并保留数据! Source tutorial ....在我看来,本教程比你所评论的更好,更详细。