Re: [android-developers] Re: SQLite concurrent access best practices

2010-05-09 Thread 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 acs@gmail.com wrote:

 For insert() and update(), have it under synchronized blocks.

 On May 8, 5:40 pm, Thierry Legras tleg...@gmail.com 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.comandroid-developers%2bunsubscr...@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.comandroid-developers%2bunsubscr...@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

Re: [android-developers] Re: SQLite concurrent access best practices

2010-05-09 Thread Thierry Legras
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 evgen...@gmail.com

 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 acs@gmail.com wrote:

 For insert() and update(), have it under synchronized blocks.

 On May 8, 5:40 pm, Thierry Legras tleg...@gmail.com 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

[android-developers] Re: SQLite concurrent access best practices

2010-05-08 Thread Senthil ACS
For insert() and update(), have it under synchronized blocks.

On May 8, 5:40 pm, Thierry Legras tleg...@gmail.com 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