【问题标题】:Is it possible to restore overwritten android SQLite database?是否可以恢复被覆盖的 android SQLite 数据库?
【发布时间】:2018-01-23 10:12:57
【问题描述】:

我想知道升级到Android SQLite的新数据库版本后是否可以恢复旧的数据库数据?

谢谢。

【问题讨论】:

标签: android sqlite android-sqlite


【解决方案1】:

因为现在升级了,所以无法获取之前版本的数据库数据。

您可以在升级前备份每个版本

参考这个: Backup/restore sqlite db in android

【讨论】:

    【解决方案2】:

    如果任何旧数据已更改,则不会(除非您可以轻松确定已更改的内容并且可以撤消更改)。

    可以使用PRAGMA user_version = ? 改回版本号,在哪里?是一个整数,表示要更改为的版本号。这实际上只会更改该值(DB 标头中的偏移量 60)。 user_version pragma。如果更改实际存储的版本号,则必须考虑超级调用使用的编码版本号,如果它们不同,则将调用 onUpgradeonDownGrade。即存储在 DB 标头中的值与 super 调用在代码中提供的值进行比较。

    您也可以更改传递给数据库助手(SQLiteOpenHelper 的子类)的版本号,但这会导致异常,除非 onDownGrade 方法被覆盖。

    但是,这个方法不是抽象的,所以它不是强制性的 客户来实施。如果没有被覆盖,默认实现 将拒绝降级并抛出 SQLiteException。 onDowngrade

    存储在数据库中的版本号对数据本身没有影响。这确实是一个方便的值,而 SQLiteOpenHelper 恰好使用了该值。

    数据库本身只是一个备份它的文件,您只需复制文件即可恢复它,您基本上将其复制回来。但是,实施备份和恢复只有在实施后才有用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-08
      • 2014-01-31
      • 2015-10-11
      • 1970-01-01
      相关资源
      最近更新 更多