gpt4 book ai didi

android - 如何直接从 .db 文件检查数据库版本

转载 作者:太空宇宙 更新时间:2023-11-03 12:07:30 25 4
gpt4 key购买 nike

我对允许用户将他们的数据(SD 卡上的 sqlite 文件)导入付费应用的免费应用感到进退两难。

完成这些更新后;我意识到,如果我以后需要对数据库进行更改,用户将需要将相同的数据库版本(从免费应用程序)导入到现有版本(付费应用程序)。

现实生活中的例子:

假设两个应用的版本 1 都有 1 个包含 5 列的表格。我升级到 v2,现在 1 表有 6 列。

当潜在用户在付费应用程序中执行导入以从免费应用程序导入数据时,免费应用程序有可能在数据库版本 1 上(如果用户最近没有更新应用程序),而付费应用程序应用程序将寻找数据库版本 2。我认为这会导致启动时崩溃。

如何在导入之前在付费应用中进行这样的检查:(伪代码)

File olddb = oldDb.db; // get the back up file here from SD
int piadAppDBVersion = 2; // check for the current version of the database in paid app

if (olddb.getDatabaseVersion() == getPaidAppDBVersion()) { // made up functions
// allow import;
} else {
// Toast "Your databases are incompatible"
}

所以两个问题:1.如果上述代码是确保兼容性的适当解决方案,如何做到这一点?2. 如果以上不是我问题的标准解决方案,那什么是?

旁注:我的导入包括一个简单的文件复制:复制外部存储上的备份数据库并覆盖内部存储上的数据库。

最佳答案

考虑 SQLite 数据库中的“版本”或“功能”表。不要害怕将其合并为稳定架构的一部分;我的许多数据库模式都包含应用脚本更改的日志。

但是,SQLite 确实支持 PRAGMA user_version它也可以用于此目的,尽管它只能存储一个整数值:

The pragmas schema_version and user_version are used to set or get the value of the schema-version and user-version, respectively. The schema-version and the user-version are big-endian 32-bit signed integers stored in the database header at offsets 40 and 60, respectively.

The schema-version is usually only manipulated internally by SQLite ..

The user-version is not used internally by SQLite. It may be used by applications for any purpose.

user_version PRAGMA 通过标准的 Android SQLite API 支持的,可以通过 SQLiteDatabase.getVersion 访问。和设置版本;数据库打开后。

另见 Where does Android store SQLite's database version?

关于android - 如何直接从 .db 文件检查数据库版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25297024/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com