【发布时间】:2018-01-23 10:12:57
【问题描述】:
我想知道升级到Android SQLite的新数据库版本后是否可以恢复旧的数据库数据?
谢谢。
【问题讨论】:
-
具体问题是什么?数据库版本升级不会破坏任何数据。您的代码可能会。
-
您好,谢谢,但我只想恢复被覆盖的数据库
标签: android sqlite android-sqlite
我想知道升级到Android SQLite的新数据库版本后是否可以恢复旧的数据库数据?
谢谢。
【问题讨论】:
标签: android sqlite android-sqlite
【讨论】:
如果任何旧数据已更改,则不会(除非您可以轻松确定已更改的内容并且可以撤消更改)。
可以使用PRAGMA user_version = ? 改回版本号,在哪里?是一个整数,表示要更改为的版本号。这实际上只会更改该值(DB 标头中的偏移量 60)。 user_version pragma。如果更改实际存储的版本号,则必须考虑超级调用使用的编码版本号,如果它们不同,则将调用 onUpgrade 或 onDownGrade。即存储在 DB 标头中的值与 super 调用在代码中提供的值进行比较。
您也可以更改传递给数据库助手(SQLiteOpenHelper 的子类)的版本号,但这会导致异常,除非 onDownGrade 方法被覆盖。
但是,这个方法不是抽象的,所以它不是强制性的 客户来实施。如果没有被覆盖,默认实现 将拒绝降级并抛出 SQLiteException。 onDowngrade
存储在数据库中的版本号对数据本身没有影响。这确实是一个方便的值,而 SQLiteOpenHelper 恰好使用了该值。
数据库本身只是一个备份它的文件,您只需复制文件即可恢复它,您基本上将其复制回来。但是,实施备份和恢复只有在实施后才有用。
【讨论】: