0

my android app is utilizing the phone's SQLiteDatabase. Seems that at some point of the app when it crashes, suddenly alot of my pages/fragments will not work because the database is permanently locked.

Is there a way to manually unlock it/remove the problem so that I can start accessing my other functions again? The same codes work on my other friends' phone so I believe I need to manually unlock the database on my own phone to proceed with my debugging again.

Below is my (edited: FULL) logcat if it helps:

02-08 11:15:34.880: E/SqliteDatabaseCpp(10363): sqlite3_exec - Failed to set synchronous mode = 1(Normal) 
02-08 11:15:34.895: E/SQLiteDatabase(10363): Failed to open the database. closing it.
02-08 11:15:34.895: E/SQLiteDatabase(10363): android.database.sqlite.SQLiteDatabaseLockedException: database is locked
02-08 11:15:34.895: E/SQLiteDatabase(10363):    at android.database.sqlite.SQLiteDatabase.dbopen(Native Method)
02-08 11:15:34.895: E/SQLiteDatabase(10363):    at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:1132)
02-08 11:15:34.895: E/SQLiteDatabase(10363):    at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:1083)
02-08 11:15:34.895: E/SQLiteDatabase(10363):    at android.database.sqlite.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase.java:1170)
02-08 11:15:34.895: E/SQLiteDatabase(10363):    at android.app.ContextImpl.openOrCreateDatabase(ContextImpl.java:844)
02-08 11:15:34.895: E/SQLiteDatabase(10363):    at android.content.ContextWrapper.openOrCreateDatabase(ContextWrapper.java:228)
02-08 11:15:34.895: E/SQLiteDatabase(10363):    at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:157)
02-08 11:15:34.895: E/SQLiteDatabase(10363):    at com.sqlite.database.PlaceDataSource.open(PlaceDataSource.java:26)
02-08 11:15:34.895: E/SQLiteDatabase(10363):    at com.activities.TravelogueListBaseAdapter.getView(TravelogueListBaseAdapter.java:163)
02-08 11:15:34.895: E/SQLiteDatabase(10363):    at android.widget.HeaderViewListAdapter.getView(HeaderViewListAdapter.java:220)
02-08 11:15:34.895: E/SQLiteDatabase(10363):    at android.widget.AbsListView.obtainView(AbsListView.java:2197)
02-08 11:15:34.895: E/SQLiteDatabase(10363):    at android.widget.ListView.measureHeightOfChildren(ListView.java:1244)
02-08 11:15:34.895: E/SQLiteDatabase(10363):    at android.widget.ListView.onMeasure(ListView.java:1155)
02-08 11:15:34.895: E/SQLiteDatabase(10363):    at android.view.View.measure(View.java:12929)
02-08 11:15:34.895: E/SQLiteDatabase(10363):    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4703)
02-08 11:15:34.895: E/SQLiteDatabase(10363):    at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1385)
02-08 11:15:34.895: E/SQLiteDatabase(10363):    at android.widget.LinearLayout.measureVertical(LinearLayout.java:670)
02-08 11:15:34.895: E/SQLiteDatabase(10363):    at android.widget.LinearLayout.onMeasure(LinearLayout.java:563)
02-08 11:15:34.895: E/SQLiteDatabase(10363):    at android.view.View.measure(View.java:12929)
02-08 11:15:34.895: E/SQLiteDatabase(10363):    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4703)
02-08 11:15:34.895: E/SQLiteDatabase(10363):    at android.widget.FrameLayout.onMeasure(FrameLayout.java:293)
02-08 11:15:34.895: E/SQLiteDatabase(10363):    at android.view.View.measure(View.java:12929)
02-08 11:15:34.895: E/SQLiteDatabase(10363):    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4703)
02-08 11:15:34.895: E/SQLiteDatabase(10363):    at android.widget.FrameLayout.onMeasure(FrameLayout.java:293)
02-08 11:15:34.895: E/SQLiteDatabase(10363):    at android.view.View.measure(View.java:12929)
02-08 11:15:34.895: E/SQLiteDatabase(10363):    at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:594)
02-08 11:15:34.895: E/SQLiteDatabase(10363):    at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:376)
02-08 11:15:34.895: E/SQLiteDatabase(10363):    at android.view.View.measure(View.java:12929)
02-08 11:15:34.895: E/SQLiteDatabase(10363):    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4703)
02-08 11:15:34.895: E/SQLiteDatabase(10363):    at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1385)
02-08 11:15:34.895: E/SQLiteDatabase(10363):    at android.widget.LinearLayout.measureHorizontal(LinearLayout.java:1027)
02-08 11:15:34.895: E/SQLiteDatabase(10363):    at android.widget.LinearLayout.onMeasure(LinearLayout.java:565)
02-08 11:15:34.895: E/SQLiteDatabase(10363):    at android.view.View.measure(View.java:12929)
02-08 11:15:34.895: E/SQLiteDatabase(10363):    at shared.ui.actionscontentview.ActionsContentView.onMeasure(ActionsContentView.java:259)
02-08 11:15:34.895: E/SQLiteDatabase(10363):    at android.view.View.measure(View.java:12929)
02-08 11:15:34.895: E/SQLiteDatabase(10363):    at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:594)
02-08 11:15:34.895: E/SQLiteDatabase(10363):    at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:376)
02-08 11:15:34.895: E/SQLiteDatabase(10363):    at android.view.View.measure(View.java:12929)
02-08 11:15:34.895: E/SQLiteDatabase(10363):    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4703)
02-08 11:15:34.895: E/SQLiteDatabase(10363):    at android.widget.FrameLayout.onMeasure(FrameLayout.java:293)
02-08 11:15:34.895: E/SQLiteDatabase(10363):    at android.view.View.measure(View.java:12929)
02-08 11:15:34.895: E/SQLiteDatabase(10363):    at android.widget.LinearLayout.measureVertical(LinearLayout.java:822)
02-08 11:15:34.895: E/SQLiteDatabase(10363):    at android.widget.LinearLayout.onMeasure(LinearLayout.java:563)
02-08 11:15:34.895: E/SQLiteDatabase(10363):    at android.view.View.measure(View.java:12929)
02-08 11:15:34.895: E/SQLiteDatabase(10363):    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4703)
02-08 11:15:34.895: E/SQLiteDatabase(10363):    at android.widget.FrameLayout.onMeasure(FrameLayout.java:293)
02-08 11:15:34.895: E/SQLiteDatabase(10363):    at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2257)
02-08 11:15:34.895: E/SQLiteDatabase(10363):    at android.view.View.measure(View.java:12929)
02-08 11:15:34.895: E/SQLiteDatabase(10363):    at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1240)
02-08 11:15:34.895: E/SQLiteDatabase(10363):    at android.view.ViewRootImpl.handleMessage(ViewRootImpl.java:2628)
02-08 11:15:34.895: E/SQLiteDatabase(10363):    at android.os.Handler.dispatchMessage(Handler.java:99)
02-08 11:15:34.895: E/SQLiteDatabase(10363):    at android.os.Looper.loop(Looper.java:137)
02-08 11:15:34.895: E/SQLiteDatabase(10363):    at android.app.ActivityThread.main(ActivityThread.java:4511)
02-08 11:15:34.895: E/SQLiteDatabase(10363):    at java.lang.reflect.Method.invokeNative(Native Method)
02-08 11:15:34.895: E/SQLiteDatabase(10363):    at   java.lang.reflect.Method.invoke(Method.java:511)
02-08 11:15:34.895: E/SQLiteDatabase(10363):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:980)
02-08 11:15:34.895: E/SQLiteDatabase(10363):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:747)
02-08 11:15:34.895: E/SQLiteDatabase(10363):    at dalvik.system.NativeStart.main(Native Method)
02-08 11:15:34.900: E/AndroidRuntime(10363): FATAL EXCEPTION: main
02-08 11:15:34.900: E/AndroidRuntime(10363): android.database.sqlite.SQLiteDatabaseLockedException: database is locked
02-08 11:15:34.900: E/AndroidRuntime(10363):    at android.database.sqlite.SQLiteDatabase.dbopen(Native Method)
02-08 11:15:34.900: E/AndroidRuntime(10363):    at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:1132)
02-08 11:15:34.900: E/AndroidRuntime(10363):    at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:1083)
02-08 11:15:34.900: E/AndroidRuntime(10363):    at android.database.sqlite.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase.java:1170)
02-08 11:15:34.900: E/AndroidRuntime(10363):    at android.app.ContextImpl.openOrCreateDatabase(ContextImpl.java:844)
02-08 11:15:34.900: E/AndroidRuntime(10363):    at android.content.ContextWrapper.openOrCreateDatabase(ContextWrapper.java:228)
02-08 11:15:34.900: E/AndroidRuntime(10363):    at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:157)
02-08 11:15:34.900: E/AndroidRuntime(10363):    at com.sqlite.database.PlaceDataSource.open(PlaceDataSource.java:26)
02-08 11:15:34.900: E/AndroidRuntime(10363):    at com.activities.TravelogueListBaseAdapter.getView(TravelogueListBaseAdapter.java:163)
02-08 11:15:34.900: E/AndroidRuntime(10363):    at android.widget.HeaderViewListAdapter.getView(HeaderViewListAdapter.java:220)
02-08 11:15:34.900: E/AndroidRuntime(10363):    at android.widget.AbsListView.obtainView(AbsListView.java:2197)
02-08 11:15:34.900: E/AndroidRuntime(10363):    at android.widget.ListView.measureHeightOfChildren(ListView.java:1244)
02-08 11:15:34.900: E/AndroidRuntime(10363):    at android.widget.ListView.onMeasure(ListView.java:1155)
02-08 11:15:34.900: E/AndroidRuntime(10363):    at android.view.View.measure(View.java:12929)
02-08 11:15:34.900: E/AndroidRuntime(10363):    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4703)
02-08 11:15:34.900: E/AndroidRuntime(10363):    at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1385)
02-08 11:15:34.900: E/AndroidRuntime(10363):    at android.widget.LinearLayout.measureVertical(LinearLayout.java:670)
02-08 11:15:34.900: E/AndroidRuntime(10363):    at android.widget.LinearLayout.onMeasure(LinearLayout.java:563)
02-08 11:15:34.900: E/AndroidRuntime(10363):    at android.view.View.measure(View.java:12929)
02-08 11:15:34.900: E/AndroidRuntime(10363):    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4703)
02-08 11:15:34.900: E/AndroidRuntime(10363):    at android.widget.FrameLayout.onMeasure(FrameLayout.java:293)
02-08 11:15:34.900: E/AndroidRuntime(10363):    at android.view.View.measure(View.java:12929)
02-08 11:15:34.900: E/AndroidRuntime(10363):    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4703)
02-08 11:15:34.900: E/AndroidRuntime(10363):    at android.widget.FrameLayout.onMeasure(FrameLayout.java:293)
02-08 11:15:34.900: E/AndroidRuntime(10363):    at android.view.View.measure(View.java:12929)
02-08 11:15:34.900: E/AndroidRuntime(10363):    at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:594)
02-08 11:15:34.900: E/AndroidRuntime(10363):    at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:376)
02-08 11:15:34.900: E/AndroidRuntime(10363):    at android.view.View.measure(View.java:12929)
02-08 11:15:34.900: E/AndroidRuntime(10363):    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4703)
02-08 11:15:34.900: E/AndroidRuntime(10363):    at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1385)
02-08 11:15:34.900: E/AndroidRuntime(10363):    at android.widget.LinearLayout.measureHorizontal(LinearLayout.java:1027)
02-08 11:15:34.900: E/AndroidRuntime(10363):    at android.widget.LinearLayout.onMeasure(LinearLayout.java:565)
02-08 11:15:34.900: E/AndroidRuntime(10363):    at android.view.View.measure(View.java:12929)
02-08 11:15:34.900: E/AndroidRuntime(10363):    at shared.ui.actionscontentview.ActionsContentView.onMeasure(ActionsContentView.java:259)
02-08 11:15:34.900: E/AndroidRuntime(10363):    at android.view.View.measure(View.java:12929)
02-08 11:15:34.900: E/AndroidRuntime(10363):    at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:594)
02-08 11:15:34.900: E/AndroidRuntime(10363):    at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:376)
02-08 11:15:34.900: E/AndroidRuntime(10363):    at android.view.View.measure(View.java:12929)
02-08 11:15:34.900: E/AndroidRuntime(10363):    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4703)
02-08 11:15:34.900: E/AndroidRuntime(10363):    at android.widget.FrameLayout.onMeasure(FrameLayout.java:293)
02-08 11:15:34.900: E/AndroidRuntime(10363):    at android.view.View.measure(View.java:12929)
02-08 11:15:34.900: E/AndroidRuntime(10363):    at android.widget.LinearLayout.measureVertical(LinearLayout.java:822)
02-08 11:15:34.900: E/AndroidRuntime(10363):    at android.widget.LinearLayout.onMeasure(LinearLayout.java:563)
02-08 11:15:34.900: E/AndroidRuntime(10363):    at android.view.View.measure(View.java:12929)
02-08 11:15:34.900: E/AndroidRuntime(10363):    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4703)
02-08 11:15:34.900: E/AndroidRuntime(10363):    at android.widget.FrameLayout.onMeasure(FrameLayout.java:293)
02-08 11:15:34.900: E/AndroidRuntime(10363):    at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2257)
02-08 11:15:34.900: E/AndroidRuntime(10363):    at android.view.View.measure(View.java:12929)
02-08 11:15:34.900: E/AndroidRuntime(10363):    at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1240)
02-08 11:15:34.900: E/AndroidRuntime(10363):    at android.view.ViewRootImpl.handleMessage(ViewRootImpl.java:2628)
02-08 11:15:34.900: E/AndroidRuntime(10363):    at android.os.Handler.dispatchMessage(Handler.java:99)
02-08 11:15:34.900: E/AndroidRuntime(10363):    at android.os.Looper.loop(Looper.java:137)
02-08 11:15:34.900: E/AndroidRuntime(10363):    at android.app.ActivityThread.main(ActivityThread.java:4511)
02-08 11:15:34.900: E/AndroidRuntime(10363):    at java.lang.reflect.Method.invokeNative(Native Method)
02-08 11:15:34.900: E/AndroidRuntime(10363):    at java.lang.reflect.Method.invoke(Method.java:511)
02-08 11:15:34.900: E/AndroidRuntime(10363):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:980)
02-08 11:15:34.900: E/AndroidRuntime(10363):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:747)
02-08 11:15:34.900: E/AndroidRuntime(10363):    at dalvik.system.NativeStart.main(Native Method)
02-08 11:15:34.920: E/android.os.Debug(1981): !@Dumpstate > dumpstate -k -t -n -z -d -o /data/log/dumpstate_app_error
02-08 11:15:35.420: E/lights(1981): write_int: path 
lyk
  • 1,578
  • 5
  • 25
  • 49

2 Answers2

1

The reason this is happening is because you can only have one connection to the database open at a time. I believe you are not closing the Db connection or some thread is already writing to the Db when you are trying to write to it.

I would suggest that you access db from one SQLOpenHelper (See this example) or you make sure that you close all the instances of db helpers once you are done with them.

Abhishek Sabbarwal
  • 3,758
  • 1
  • 26
  • 41
  • I've already tried using closing the database at the constructor but it still doesn't work... public PlaceDataSource(Context context) { dbHelper = new MySQLiteHelper(context); dbHelper.close(); } – lyk Feb 08 '13 at 03:06
  • you close the connection after you are done executing your sql statements in your code. The close statement should be after that. refer this http://www.vogella.com/articles/AndroidSQLite/article.html – Abhishek Sabbarwal Feb 08 '13 at 03:08
  • ok noted, i will look through the codes that access the database again... thanks – lyk Feb 08 '13 at 03:10
1

When you application closes(or system kills it), your connection to your database will be disconnected and cleaned up . Therefore, there is no such thing as 'permanently locked'.

02-08 10:40:24.195: E/SqliteDatabaseCpp(7212): sqlite3_exec - Failed to set synchronous mode = 1(Normal) 
02-08 10:40:24.205: E/SQLiteDatabase(7212): Failed to open the database. closing it.

This problem usually is a thread trys to access the database but another thread has the lock or is using it. Solution: use only one instance of your connection to database in your application. One approach can be storing the instance in the a subbed Application class.

wtsang02
  • 18,603
  • 10
  • 49
  • 67
  • ok noted, i will look through the codes that access the database again... thanks. though I'm a little confused why the same codes will work on my other friends' phone but not mine – lyk Feb 08 '13 at 03:10
  • Here is an similar [approach](http://stackoverflow.com/questions/4557154/android-sqlite-db-when-to-close) – wtsang02 Feb 08 '13 at 03:13
  • I really don't get it. The button which causes the logcat above is only calling one instance of the the connection, which is why everything still works on all my other friends' phone. Why is it that only my phone doesn't work? – lyk Feb 08 '13 at 03:19
  • Have you tried uninstalling app or restart phone? If you did try accessing the database when your application starts if it isn't. – wtsang02 Feb 08 '13 at 03:24
  • Yes I've uninstalled many times over the past few hours, and re-run the codes. still doesn't work. but it works on all other phones, which led me thinking it's a phone problem and not a code problem... would posting the full logcat help? =X – lyk Feb 08 '13 at 03:25
  • samsung galaxy S2. does this matter? =X – lyk Feb 08 '13 at 03:31