The doc page for SQLITE_BUSY covers SQLITE_BUSY when there are multiple connections to the database.
SQLite Result Codes (SQLITE_BUSY) http://www.sqlite.org/rescode.html#busy But, I have only one connection. I believe the case where SQLITE_BUSY is returned by sqlite_close() due to unfinalized prepared statements should be mentioned there. Jeff > On Aug 21, 2015, at 3:51 AM, R.Smith <rsmith at rsweb.co.za> wrote: > > Hi Jeff, > > On 2015-08-21 07:30 AM, Jeff M wrote: >> Sometimes my iOS app creates an unreasonable number of prepared statements >> (perhaps 1,000, an app bug that I'm fixing). These prepared statements are >> later finalized just prior to doing sqlite3_close(), which sometimes returns >> SQL_BUSY. The docs say SQL_BUSY will be returned if I haven't finalized all >> prepared statements, but I believe I have done so. My iOS app has only one >> connection to the DB and I'm doing all this work on the main thread. >> >> 1. The docs don't say what to do in the case of SQL_BUSY. Does that mean >> I've certainly failed to finalize one or more prepared statements, or does >> SQLite just need more time (in which case can I loop on sqlite3_close() >> until I get SQLITE_OK)? > > SQL_BUSY does not mean anything bad except that you are trying to do some > work on a query (read: prepared statement) while another is still not done > with its duties. These duties may in your case simply mean that the "closing" > of a previous prepared statement is still under way, so yes, it just needs a > moment. You can wait a moment and try again. > > I will mention (as Simon is likely to point out soon!) that the good news is: > SQLite will do this waiting-and-retrying for you if you simply set a suitable > time-out, perhaps in the order of a minute or more, using the pragma: > > http://www.sqlite.org/pragma.html#pragma_busy_timeout > > or, if you prefer using the C-interface: > http://www.sqlite.org/c3ref/busy_timeout.html >