http://www.sqlite.org/lockingv3.html
On Jan 19, 8:00 am, Simon Dean <[email protected]> wrote: > Im writing a scheduler/calendar type application. > > The user enters some information and that gets stored in a database, > then I have a service which polls the database every sixty seconds > looking for events and spits them out via a notification. > > It used to be working pretty well until I started trying to put > progress spinners in which needed to go in a thread to display. (I > still can't get them to spin). At this point I started to get loads of > errors with database locks. > > I've done a lot of tidying up, now Im finding a problem between the > service and the insert commands. > > The service utilises "getReadableDatabase" and "rawQuery", while the > separate updater function (user controlled) utilises > "getWritableDatabase" and "execSQL" to perform inserts. > > I get errors in the log such as: > > I/CMT ( 405): Running Scheduler... > D/AndroidRuntime( 405): Shutting down VM > W/dalvikvm( 405): threadid=1: thread exiting with uncaught exception > (group=0x4001d800) > E/AndroidRuntime( 405): FATAL EXCEPTION: main > E/AndroidRuntime( 405): android.database.sqlite.SQLiteException: > error code 5: database is locked > E/AndroidRuntime( 405): at > android.database.sqlite.SQLiteStatement.native_execute(Native Method) > E/AndroidRuntime( 405): at > android.database.sqlite.SQLiteStatement.execute(SQLiteStatement.java: > 55) > E/AndroidRuntime( 405): at > android.database.sqlite.SQLiteDatabase.delete(SQLiteDatabase.java: > 1598) > E/AndroidRuntime( 405): at xxx.xxx.xxx.ProgramLocation:999) > > I've asked elsewhere and I've looked for solutions such as using > synchronized (Im still trying to wrap my head around that at the > moment), but ideally what I want to know is why is this error being > generated. If I can find why things work instead of what the solutions > are, I'll be a better Android programmer. > > Immediately before the insert, I check to see if the database > isLockedByOtherthreads(), but the answer is false. However it seems > when I open/read the database in the Service, Android then fails to be > able to do the Insert in the Activity and errors that the database is > locked. > > Why does a read lock the database? > What is generating the lock? > Why does isLockedByOtherThreads() return false and then the Insert > fail? > > Perhaps "database is locked" is an erroneous error and refers to it > not being able to generate an exclusive lock for the insert? > > Is there a way to find out programmatically what locks there are on a > database? > > And finally what are some solutions for this? > > I presume I can do reads all over the app as I wish, but the problem > comes when I try to do a write at the same time a read is being > performed. > > Perhaps I should disable the service while the update is in progress. > > Or I've heard about synchronized but I really don't have any > experience with this and Im looking for some good (android related) > theory about what it is, how it works, why you do it, and how you do > it? > > Thanks > Simon -- You received this message because you are subscribed to the Google Groups "Android Developers" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/android-developers?hl=en

