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 <[email protected]>
> 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 <[email protected]> wrote:
>
>> For insert() and update(), have it under synchronized blocks.
>>
>> On May 8, 5:40 pm, Thierry Legras <[email protected]> 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 [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