【发布时间】:2012-11-24 02:47:59
【问题描述】:
我有一个带有 3 个表的 sqlite 应用程序。我担心的是,如果我引入添加另一个表的更新(即 4 个表),那么更新后的版本将清除数据库。
鉴于备份发生在更新之前和更新之后的恢复,我如何备份/恢复数据库?如果我使用 IO 来做(复制到 SD 卡并复制回来),那么它将失败。
我可能正在考虑将数据导出到 xml 并手动加载。还有其他方法吗?有什么例子吗?
【问题讨论】:
我有一个带有 3 个表的 sqlite 应用程序。我担心的是,如果我引入添加另一个表的更新(即 4 个表),那么更新后的版本将清除数据库。
鉴于备份发生在更新之前和更新之后的恢复,我如何备份/恢复数据库?如果我使用 IO 来做(复制到 SD 卡并复制回来),那么它将失败。
我可能正在考虑将数据导出到 xml 并手动加载。还有其他方法吗?有什么例子吗?
【问题讨论】:
如果您只是想添加一个新表,请在 onUpgrade() 方法中注释掉 DROP TABLE 命令。您可以完全控制onUpgrade() 中的代码,因此它可以是:
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("CREATE TABLE ...");
}
从技术上讲,您甚至不需要增加数据库版本,只要您可以访问db 的副本,就可以执行您的 CREATE 语句。
【讨论】:
onUpgrade() 方法非常原始。 (擦除所有数据没有用。)更智能、精通 SQL 的方法使用 ALTER TABLE 添加列或以其他方式将数据添加到新架构中。 This question 演示了一位作者的多版本升级。