Re: [android-developers] Re: SQLite & concurrent access best practices
Thank you both for your answers. Are you sure using synchronized is enough inside the insert or update? I also got exceptions in call to getReadableDatabase while another thread was being writing so i don't think it would work. I am already using transaction for DB write but it did not seem to make any changes. The way i do each time i need to read/write/update DB is something like that: OnRead() { db = new myDBHelperClass(); db.getReadableDatabase db.query(...) db.close() } OnWrite() { db = new myDBHelperClass(); db.getWriteableDatabase db.beginTransaction db.insert(...) db.endTransaction } I was rather thinking of using a synchronized in OnRead and OnWrite, but has such methods exists in differents Activities and Task, i am pretty reluctant to do that. I also so design were DB is open in Activity onCreate and closed in onDestroy, but i guess i will not work when a task also needs write in the DB while the DB is open by the activity. 2010/5/9 Evgeny V > I believe you can provide the safe concurrency managment by using DB > transactions. Since you don't care about sequence between separate > activities you can run following snippet: > > try > db.BeginTransaction > db.RunCommand(insert or update etc.) > db.CommitTransaction > catch > db.RollbackTransaction > > Evgeny > > On Sun, May 9, 2010 at 8:18 AM, Senthil ACS wrote: > >> For insert() and update(), have it under synchronized blocks. >> >> On May 8, 5:40 pm, Thierry Legras wrote: >> > Hi, >> > >> > I have an application with several tables, each being updated by >> AsyncTask >> > fired by different Activities and used by UI with SimpleCursorAdapter. >> > Though i am not developping a game, I would like to avoid to interrupt >> the >> > user as mush as possible. >> > Has SQLite is not multiaccess proof, what is the best way of handling >> such >> > situation? >> > >> > - I consider adding lock from each DB open and to each close sequence >> but >> > this seems quite subject to bugs >> > - The solution i am using now is that each DB access (read/write) is >> done in >> > UI thread (when AsyncTask completes, DB write is done typically in >> > onPostExecute), but that means user is blocked for several seconds >> during >> > the DB write. >> > >> > Is there any better solution for that? Should i use a ContentProvider? >> when >> > i read "Content providers store and retrieve data and make it accessible >> to >> > all applications", this does not seems to be what i need. Any idea? >> > >> > -- >> > Thierry. >> > (snip) -- Thierry. -- You received this message because you are subscribed to the Google Groups "Android Developers" group. To post to this group, send email to android-developers@googlegroups.com To unsubscribe from this group, send email to android-developers+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/android-developers?hl=en
Re: [android-developers] Re: SQLite & concurrent access best practices
I believe you can provide the safe concurrency managment by using DB transactions. Since you don't care about sequence between separate activities you can run following snippet: try db.BeginTransaction db.RunCommand(insert or update etc.) db.CommitTransaction catch db.RollbackTransaction Evgeny On Sun, May 9, 2010 at 8:18 AM, Senthil ACS wrote: > For insert() and update(), have it under synchronized blocks. > > On May 8, 5:40 pm, Thierry Legras wrote: > > Hi, > > > > I have an application with several tables, each being updated by > AsyncTask > > fired by different Activities and used by UI with SimpleCursorAdapter. > > Though i am not developping a game, I would like to avoid to interrupt > the > > user as mush as possible. > > Has SQLite is not multiaccess proof, what is the best way of handling > such > > situation? > > > > - I consider adding lock from each DB open and to each close sequence but > > this seems quite subject to bugs > > - The solution i am using now is that each DB access (read/write) is done > in > > UI thread (when AsyncTask completes, DB write is done typically in > > onPostExecute), but that means user is blocked for several seconds during > > the DB write. > > > > Is there any better solution for that? Should i use a ContentProvider? > when > > i read "Content providers store and retrieve data and make it accessible > to > > all applications", this does not seems to be what i need. Any idea? > > > > -- > > Thierry. > > > > -- > > You received this message because you are subscribed to the Google > > Groups "Android Developers" group. > > To post to this group, send email to android-developers@googlegroups.com > > To unsubscribe from this group, send email to > > android-developers+unsubscr...@googlegroups.com > > For more options, visit this group athttp:// > groups.google.com/group/android-developers?hl=en > > -- > You received this message because you are subscribed to the Google > Groups "Android Developers" group. > To post to this group, send email to android-developers@googlegroups.com > To unsubscribe from this group, send email to > android-developers+unsubscr...@googlegroups.com > For more options, visit this group at > http://groups.google.com/group/android-developers?hl=en > -- You received this message because you are subscribed to the Google Groups "Android Developers" group. To post to this group, send email to android-developers@googlegroups.com To unsubscribe from this group, send email to android-developers+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/android-developers?hl=en
[android-developers] Re: SQLite & concurrent access best practices
For insert() and update(), have it under synchronized blocks. On May 8, 5:40 pm, Thierry Legras wrote: > Hi, > > I have an application with several tables, each being updated by AsyncTask > fired by different Activities and used by UI with SimpleCursorAdapter. > Though i am not developping a game, I would like to avoid to interrupt the > user as mush as possible. > Has SQLite is not multiaccess proof, what is the best way of handling such > situation? > > - I consider adding lock from each DB open and to each close sequence but > this seems quite subject to bugs > - The solution i am using now is that each DB access (read/write) is done in > UI thread (when AsyncTask completes, DB write is done typically in > onPostExecute), but that means user is blocked for several seconds during > the DB write. > > Is there any better solution for that? Should i use a ContentProvider? when > i read "Content providers store and retrieve data and make it accessible to > all applications", this does not seems to be what i need. Any idea? > > -- > Thierry. > > -- > You received this message because you are subscribed to the Google > Groups "Android Developers" group. > To post to this group, send email to android-developers@googlegroups.com > To unsubscribe from this group, send email to > android-developers+unsubscr...@googlegroups.com > For more options, visit this group > athttp://groups.google.com/group/android-developers?hl=en -- You received this message because you are subscribed to the Google Groups "Android Developers" group. To post to this group, send email to android-developers@googlegroups.com To unsubscribe from this group, send email to android-developers+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/android-developers?hl=en