I'm afraid this is by design of sqlite: Sqlite will lock
the database during a writing transaction, I think no matter
if you open a 2nd connection using the readonly flag.

the typical solutions are:
a) retry your read attempt after you receive a busy error code until
    it proceeds.
b) consider shared cache mode and pragma read_uncommitted = True;

hope this helps

Marcus

Tino Lange wrote:
> Hi all,
> 
> I have written a program that opens a SQLIte3 database and writes in it most 
> of the time via replace/update.
> 
> If I do select like (no writes, really only reads) statements from some 
> other process that carefully opens the database with "sqlite3_open_v2(..., 
> SQLITE_OPEN_READONLY, ...)" the main (writing) application might get 
> errcode=5 ermmsg='database is locked' errors when it tries to write while 
> the other application (only!) reads.
> 
> How is that possible? How to prevent?
> 
> I would expect that the reading application might (of course) sometimes get 
> "database is locked" errors, but the writing application should never.
> 
> [ I have also realized that the sqlite3 commandline tool uses sqlite_open() 
> and always opens in read/write mode. That's why I wrote my own reading 
> application using sqlite3_open_v2 ]
> 
> Thanks
> 
> Tino
> 
> _______________________________________________
> sqlite-users mailing list
> sqlite-users@sqlite.org
> http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users
> 

_______________________________________________
sqlite-users mailing list
sqlite-users@sqlite.org
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to