在我的 android 应用程序中,有两个进程,假设进程 A 和 B
有趣的是,如果进程 A 尝试访问 sqlite 数据库,一切都很好。但是,如果进程 B 这样做,将显示以下异常
android.database.sqlite.SQLiteException:无法打开数据库文件:BEGIN EXCLUSIVE;
仅供参考,实际上不是我的应用程序尝试使用 SQLite 数据库。相反,我使用 Google Analytics 来跟踪用户,它使用 SQLite 数据库。
为什么会这样?谢谢你。
在我的 android 应用程序中,有两个进程,假设进程 A 和 B
有趣的是,如果进程 A 尝试访问 sqlite 数据库,一切都很好。但是,如果进程 B 这样做,将显示以下异常
android.database.sqlite.SQLiteException:无法打开数据库文件:BEGIN EXCLUSIVE;
仅供参考,实际上不是我的应用程序尝试使用 SQLite 数据库。相反,我使用 Google Analytics 来跟踪用户,它使用 SQLite 数据库。
为什么会这样?谢谢你。
实际上,您使用的是Transaction.and 当事务正在进行时,没有其他进程可以访问数据库。
我认为这就是你得到这个例外的原因
有时候这种情况会发生
beginTransaction在未打开的数据库连接上调用。close的数据库建立连接。 concurrency.db.close(); 我希望这可能是你的问题。
如果进程 A 尝试访问 sqlite 数据库,一切都很好。但是,如果进程 B 这样做,将显示以下异常
Sqlite 只会从您的应用程序数据库目录中打开数据库。
DB_PATH = "/data/data/"+ context.getPackageName() + "/databases/";
在您的情况下,数据库存在于进程 A 目录中,因此它可以访问它。但是进程 B 无法从进程 A 目录中读取数据库。
您可以做的是通过提供上述路径将该数据库文件复制到 Process B 目录中。