ATTACH DATABASE 在 Android 上给出“数据库已在使用中”

iti*_*nce 6 database sqlite android

在 iOS 和 Android 上的本机应用程序项目中,我们在 Android 上遇到了sqlite3的问题。我们想要打开两个数据库,并通过ATTACH DATABASE(sql 命令)将一个数据库附加到第二个数据库。

我们所做的:

  1. 打开sqlite3数据库“user.db”(Android设备上的最终本机文件路径是“/data/user/0/com.company.app/databases/user.db”,我们使用android.database.sqlite.SQLiteDatabase

  2. 打开sqlite3数据库“system.db”

  3. 将用户数据库附加到系统数据库:

在 system.db-database 的 SQLiteDatabase-Instance 上,我们执行

ATTACH DATABASE '/data/user/0/com.company.app/databases/user.db' AS dbUser
Run Code Online (Sandbox Code Playgroud)

结果:

这会产生以下错误:

数据库 dbUser 已在使用中(代码 1)

iOS 版 sqlite3 上的相同 sql 语句运行良好,没有任何错误。

为了完整性。使用以下语句打开数据库:

import android.database.sqlite.SQLiteDatabase;

SQLiteDatabase mydb = SQLiteDatabase.openDatabase(dbfile.getAbsolutePath(), null, openFlags);
Run Code Online (Sandbox Code Playgroud)

向 google 询问此类错误消息,很多网站都指出不允许使用 TEMP 作为数据库别名。由于我们使用“dbUser”而不是TEMP,所以应该还有另一个原因。我们现在还无法弄清楚。

有人可以帮忙吗?

CL.*_*CL. 3

您不需要打开要附加的数据库;ATTACH 语句已经打开它。

无论如何,错误“数据库xxx已在使用中”表明某个数据库已附加了该特定名称。

您的代码的问题是它被执行了两次。