[odb-users] RE: SQLITE unable to open db multiple threads

Sum, Eric B eric.b.sum at lmco.com
Mon Aug 6 09:25:26 EDT 2012

Sorry, one more follow-up question.

The odb manual states that by default, a sqlite connection_pool_factory is used, which behind the scenes uses the shared_cache/unlock_notify mechanism.  From reading about the shared_cache/unlock_notify mechanism it seems that "The sqlite3_unlock_notify()<http://sqlite.org/c3ref/unlock_notify.html> interface is designed for use in systems that have a separate thread assigned to each database connection<http://sqlite.org/c3ref/sqlite3.html>"  and the shared_cache mechanism allows the same cache to be shared across the entire process that contains all of its threads.  How do I create a database connection for each individual separate thread as it seems the intended use is?

1.        I tried explicitly calling connection_ptr c(db.connection())  in each thread on the existing db object created in the main function that was passed to each thread.

2.       I tried passing the existing db object to each thread, which I suppose does not create a new connection and uses the existing one across multiple threads.

3.       I tried called the sqlite db constructor in each thread to open the existing database created in the main function in READWRITE mode, which I assume creates a connection in each thread to use.

None of these seemed to work.  Any help or insight on this is much appreciated.

Thanks again,

From: Sum, Eric B
Sent: Monday, August 06, 2012 9:09 AM
To: 'odb-users at codesynthesis.com'
Subject: SQLITE unable to open db multiple threads


I am persisting objects into a sqlite database from multiple threads.  However, I am getting odd results caught with odb exceptions.  I get sqlite error 14: unable to open database multiple times throughout the execution of my program, and only a fraction of the objects persisted are present in the database.  I assume I am getting this error because one of the threads is unable to establish a connection to the database.  I am aware that you are unable to do concurrent writes to the sqlite database due to its exclusive locking mechanism, but I thought that there would be some scheduling/blocking scheme used inherently by odb to schedule the order of the persists from the different threads.    How do I fix this?  Any ideas on why I am getting this error?


More information about the odb-users mailing list