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

时间:2012-10-22 02:49:25

标签: 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

中打开

2 个答案:

答案 0 :(得分:2)

我认为当一个线程(活动?)使用(锁定)数据库时发生了访问冲突,另一个线程(服务?)试图使用(锁定)它但失败了。

您可以将自己的SQLiteOpenHelper设置为单例类,然后在活动和服务之间共享它,然后该类将为您正确处理冲突。见the discussion in this thread

答案 1 :(得分:0)

检查数据库是否被其他线程打开但在您尝试再次打开时未关闭。如果是,请在使用后尝试关闭它。