2

在我的 android 应用程序中,有两个进程,假设进程 A 和 B

有趣的是,如果进程 A 尝试访问 sqlite 数据库,一切都很好。但是,如果进程 B 这样做,将显示以下异常

android.database.sqlite.SQLiteException:无法打开数据库文件:BEGIN EXCLUSIVE;

仅供参考,实际上不是我的应用程序尝试使用 SQLite 数据库。相反,我使用 Google Analytics 来跟踪用户,它使用 SQLite 数据库。

为什么会这样?谢谢你。

4

3 回答 3

2

实际上,您使用的是Transaction.and 当事务正在进行时,没有其他进程可以访问数据库。

我认为这就是你得到这个例外的原因

有时候这种情况会发生

  1. whenbeginTransaction在未打开的数据库连接上调用。
  2. 当 SQL 语句包含语法错误时
于 2012-06-20T06:06:56.010 回答
2
  • 在开始将数据库与进程 B一起使用之前,您必须先与进程 Aclose的数据库建立连接。
  • 这将解决您的concurrency.
  • 我们用db.close();

我希望这可能是你的问题。

于 2012-06-20T06:36:23.027 回答
1

如果进程 A 尝试访问 sqlite 数据库,一切都很好。但是,如果进程 B 这样做,将显示以下异常

Sqlite 只会从您的应用程序数据库目录中打开数据库。

DB_PATH = "/data/data/"+ context.getPackageName() + "/databases/"; 

在您的情况下,数据库存在于进程 A 目录中,因此它可以访问它。但是进程 B 无法从进程 A 目录中读取数据库。

您可以做的是通过提供上述路径将该数据库文件复制到 Process B 目录中。

于 2012-06-20T06:02:22.527 回答