是否有可能恢复被覆盖的android SQLite数据库?

时间:2018-01-23 10:12:57

标签: android sqlite android-sqlite

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

谢谢。

2 个答案:

答案 0 :(得分:0)

您无法获取以前版本的数据库数据,因为现在它已升级。

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

参考: Backup/restore sqlite db in android

答案 1 :(得分:0)

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

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

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

  

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

存储在数据库中的版本号对数据本身没有影响。这真的是一个方便的价值,恰恰相反,SQLiteOpenHelper使用了这个值。

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