【问题标题】:Keeping SQLite data after update更新后保留 SQLite 数据
【发布时间】:2012-11-24 02:47:59
【问题描述】:

我有一个带有 3 个表的 sqlite 应用程序。我担心的是,如果我引入添加另一个表的更新(即 4 个表),那么更新后的版本将清除数据库。

鉴于备份发生在更新之前和更新之后的恢复,我如何备份/恢复数据库?如果我使用 IO 来做(复制到 SD 卡并复制回来),那么它将失败。

我可能正在考虑将数据导出到 xml 并手动加载。还有其他方法吗?有什么例子吗?

【问题讨论】:

    标签: android sqlite


    【解决方案1】:

    如果您只是想添加一个新表,请在 onUpgrade() 方法中注释掉 DROP TABLE 命令。您可以完全控制onUpgrade() 中的代码,因此它可以是:

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("CREATE TABLE ...");
    }
    

    从技术上讲,您甚至不需要增加数据库版本,只要您可以访问db 的副本,就可以执行您的 CREATE 语句。

    【讨论】:

    • 天啊!我怎么没想到!谢谢你。但是我的问题仍然存在,我该如何备份。假设用户备份数据库,卸载应用程序,下载新更新的应用程序,然后决定他要加载备份文件。我怎样才能做到这一点?我认为简单的 IO 副本行不通
    • SQLite 数据库只是一个普通文件,因此您可以将其复制到 SD 卡,甚至与现有数据库位于同一文件夹中。 Here is an example.
    • 我认为你错过了我的观点。假设我有 db 的版本 1,它有 3 个表。我把它复制到SD卡上。用户升级到具有 4 个表的 db 版本 2。现在,如果您将 db 文件从 SD 复制回来,那么您强制使用版本 1,尽管代码会将其视为版本 2。看到问题,我想要一种能够将数据导出和导入到同一个表的方法有没有多余的桌子
    • 好的。删除表的经典onUpgrade() 方法非常原始。 (擦除所有数据没有用。)更智能、精通 SQL 的方法使用 ALTER TABLE 添加列或以其他方式将数据添加到新架构中。 This question 演示了一位作者的多版本升级。
    • 哦,好的,非常感谢。接受:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-02-22
    • 1970-01-01
    • 2017-03-05
    • 2019-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多