4
votes

Im getting a database is locked (code 5) in my ListActivity the code works in the other versions of the Emulator but fails in the 4.1 version of the emulator

E/SQLiteLog( 2132): (5) database is locked E/SQLiteDatabase( 2132): Failed to open database '/data/data/id.online.mydroid/databases/geo.db'. E/SQLiteDatabase( 2132): android.database.sqlite.SQLiteDatabaseLockedException: database is locked (code 5): , while compiling: PRAGMA al_mode E/SQLiteDatabase( 2132): at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method) E/SQLiteDatabase( 2132): at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:882) E/SQLiteDatabase( 2132): at android.database.sqlite.SQLiteConnection.executeForString(SQLiteConnection.java:627) E/SQLiteDatabase( 2132): at android.database.sqlite.SQLiteConnection.setJournalMode(SQLiteConnection.java:313) E/SQLiteDatabase( 2132): at android.database.sqlite.SQLiteConnection.setWalModeFromConfiguration(SQLiteConnection.java:287) E/SQLiteDatabase( 2132): at android.database.sqlite.SQLiteConnection.open(SQLiteConnection.java:215) E/SQLiteDatabase( 2132): at android.database.sqlite.SQLiteConnection.open(SQLiteConnection.java:193) E/SQLiteDatabase( 2132): at android.database.sqlite.SQLiteConnectionPool.openConnectionLocked(SQLiteConnectionPool.java:463) E/SQLiteDatabase( 2132): at android.database.sqlite.SQLiteConnectionPool.open(SQLiteConnectionPool.java:185) E/SQLiteDatabase( 2132): at android.database.sqlite.SQLiteConnectionPool.open(SQLiteConnectionPool.java:177) E/SQLiteDatabase( 2132): at android.database.sqlite.SQLiteDatabase.openInner(SQLiteDatabase.java:804) E/SQLiteDatabase( 2132): at android.database.sqlite.SQLiteDatabase.open(SQLiteDatabase.java:789) E/SQLiteDatabase( 2132): at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:694) E/SQLiteDatabase( 2132): at android.app.ContextImpl.openOrCreateDatabase(ContextImpl.java:804) E/SQLiteDatabase( 2132): at android.content.ContextWrapper.openOrCreateDatabase(ContextWrapper.java:221) E/SQLiteDatabase( 2132): at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:224) E/SQLiteDatabase( 2132): at android.database.sqlite.SQLiteOpenHelper.getReadableDatabase(SQLiteOpenHelper.java:188) E/SQLiteDatabase( 2132): at id.online.mydroid.myDB.openForRead(myDB.java:158) E/SQLiteDatabase( 2132): at id.online.mydroid.mydroid.refreshCount(mydroid.java:207) E/SQLiteDatabase( 2132): at id.online.mydroid.mydroid.onResume(mydroid.java:525) Blockquote

1
found the bug I had beginTransaction in the query but no endTransaction so it was holding DB lock after query. removed beginTransaction and now works ok, JB must have tightnen up on these as it works for older android .. bug solved. - mtraxdroid
Can you tell me from what version of Android you think this has started failing? Wouldn't be 4.1.1 by any chance? - Andrew Mackenzie

1 Answers

8
votes

beginTransaction was holding lock