java - 此错误消息是什么意思? - sqlite3_exec - 无法设置同步模式 = 1(正常)

标签 java android sqlite

我正在尝试在 "Service" 中打开 SQLiteDatabase,但失败并出现以下异常:

10-21 19:33:23.547: E/SqliteDatabaseCpp(31208): sqlite3_exec - Failed to set synchronous mode = 1(Normal) 
10-21 19:33:23.547: E/SQLiteDatabase(31208): Failed to open the database. closing it.
10-21 19:33:23.547: E/SQLiteDatabase(31208): android.database.sqlite.SQLiteDatabaseLockedException: database is locked
10-21 19:33:23.547: E/SQLiteDatabase(31208):    at android.database.sqlite.SQLiteDatabase.dbopen(Native Method)
10-21 19:33:23.547: E/SQLiteDatabase(31208):    at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:1135)
10-21 19:33:23.547: E/SQLiteDatabase(31208):    at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:1086)
10-21 19:33:23.547: E/SQLiteDatabase(31208):    at android.database.sqlite.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase.java:1173)
10-21 19:33:23.547: E/SQLiteDatabase(31208):    at android.app.ContextImpl.openOrCreateDatabase(ContextImpl.java:858)
10-21 19:33:23.547: E/SQLiteDatabase(31208):    at android.content.ContextWrapper.openOrCreateDatabase(ContextWrapper.java:228)
10-21 19:33:23.547: E/SQLiteDatabase(31208):    at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:157)

谁能解释一下这是什么意思?以及如何解决?数据库在 MainActivityService 中打开。

最佳答案

我认为这是一个访问冲突,当一个线程( Activity ?)使用(锁定)数据库时,另一个线程(服务?)尝试使用(锁定)它但失败了。

你可以把你自己的SQLiteOpenHelper做成一个单例类,然后在activity和service之间共享,然后这个类会为你妥善处理冲突。参见 the discussion in this thread

关于java - 此错误消息是什么意思? - sqlite3_exec - 无法设置同步模式 = 1(正常),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13004424/

相关文章:

java - Spring MVC session 属性初始设置

java - 如何通过查询sqlite匹配数字 "start with"

Sqlite 使用 JOIN 和重复项减去总和(使用分组依据)

java - 二分查找递归调用次数?

java - Android - 需要帮助来设计具有表格布局或 ListView 的屏幕

Android 将基本计时器转换为 RxJava

java - 运行时的 json 解析错误

java - 同时链接多个方法调用?提供的示例

javascript - Nodejs迭代后读取数组

java - 处理程序未给出确切的时间间隔