> So for a temp solution, I will open the database again if the
> application detect there is a SQLITE_MISUSE, is this solution safe enough?

I'd say no, it isn't. This error shows a problem in your application,
most probably some race condition that you didn't see. So you want
just to close your eyes and re-open the connection. But that will mean
that somewhere else in your application you'll have problems and less
visible ones like loss of some data or maybe even segmentation fault.
So you better look at your code and at how you use SQLite's API.

If your sources of SQLite don't have SQLITE3_THREADSAFE variable then
these sources are most probably not thread-safe. And if you use one
database connection from all your threads you have to properly guard
each usage with mutex. So check that your code always does that.


Pavel

On Mon, Jan 11, 2010 at 8:59 AM, tim shen <bh_s...@hotmail.com> wrote:
>
> Hi Pavel,
>
> Since we are at the last stage to release the project, is it safe to replace
> with the latest sqlite version without our QA's full testing of the
> application's function? I knew there are many improvement in the latest
> version. :-). So for a temp solution, I will open the database again if the
> application detect there is a SQLITE_MISUSE, is this solution safe enough?
>
> Thanks,
> Tim
>
>
>
> Pavel Ivanov-2 wrote:
>>
>>> I am now using SQLite version 3.3.5, and i cannot find flag
>>> SQLITE3_THREADSAFE in source code, so my question is how can i ensure i
>>> compile with this option?
>>
>> Probably there was no such flag in that version yet (I don't know
>> enough about it). Why don't you use the latest version?
>>
>>> The second question is when i met SQLITE_MISUSE error, can i reset or
>>> reopen
>>> the database to avoid this error?
>>
>> You cannot reset database connection, but you can close it (probably
>> finalizing all statements before that using
>> http://www.sqlite.org/c3ref/next_stmt.html if it exist in 3.3.5) and
>> open it again.
>>
>>
>> Pavel
>>
>> On Sun, Jan 10, 2010 at 12:27 AM, tim shen  wrote:
>>>
>>> hi Pavel,
>>> Thanks for your reply and reminder.
>>> I am now using SQLite version 3.3.5, and i cannot find flag
>>> SQLITE3_THREADSAFE in source code, so my question is how can i ensure i
>>> compile with this option?
>>>
>>> The second question is when i met SQLITE_MISUSE error, can i reset or
>>> reopen
>>> the database to avoid this error?
>>>
>>> Regards,
>>> Tim
>>>
>>>
>>> Pavel Ivanov-2 wrote:
>>>>
>>>> Oh, and one more thing: sqlite-dev list is for questions related to
>>>> developing SQLite itself. For problems with using SQLite you should
>>>> write to sqlite-users list (put in CC).
>>>>
>>>> Pavel
>>>>
>>>> On Fri, Jan 8, 2010 at 7:50 AM, Pavel Ivanov  wrote:
>>>>> As you're new to SQLite you could easily make some incorrect usages of
>>>>> SQLite's API. But we won't be able to say to you exactly what is
>>>>> incorrect until we don't see the actual code. So please show it to us.
>>>>> Incidentally exact value of SQLITE3_THREADSAFE (0, 1 or 2) during
>>>>> compilation is also important as well as any other flags you use.
>>>>>
>>>>> And just out of curiosity: how did you check that the reason "using
>>>>> sqlite_close or calling sqlite_exec with the same database pointer
>>>>> simultaneously from two separate threads" is not applied to you if as
>>>>> you said in the application "you saved this handle as global variable,
>>>>> then in other threads you use it"?
>>>>>
>>>>>
>>>>> Pavel
>>>>>
>>>>> On Fri, Jan 8, 2010 at 3:42 AM, Tim Shen  wrote:
>>>>>> Hi All,
>>>>>>
>>>>>>   I am new to SQLite and recently I took over a new project which
>>>>>> using
>>>>>> SQLite DB under WinCE. We build the SQlite.dll using flag
>>>>>> SQLITE3_THREADSAFE, and used Multi-Thread programming in the
>>>>>> application.
>>>>>> The problem is that in some operations, function call sqlite3_exec()
>>>>>> will
>>>>>> throw out error SQLITE_MISUSE.
>>>>>>   I call the sqlite3_open16() and sqlite3_close() in main thread and
>>>>>> saved
>>>>>> this handle as global variable. Then in other threads, I will use this
>>>>>> global variable to call other sqlite3 function such as
>>>>>> sqlite3_exec(),sqlite3_get_table(),sqlite3_free_table().
>>>>>>  I searched on the sqlite3 site, and got the following information
>>>>>>
>>>>>> SQLITE_MISUSE
>>>>>> This error might occur if one or more of the SQLite API routines is
>>>>>> used
>>>>>> incorrectly. Examples of incorrect usage include calling sqlite_exec
>>>>>> after
>>>>>> the database has been closed using sqlite_close or calling sqlite_exec
>>>>>> with
>>>>>> the same database pointer simultaneously from two separate threads.
>>>>>>
>>>>>> I checked above 2 possible reason may caused this error and make sure
>>>>>> it
>>>>>> is
>>>>>> not caused by them. Any other advise you guys can give it to me?
>>>>>> Thanks
>>>>>> in
>>>>>> advance.
>>>>>>
>>>>>> Regards,
>>>>>> Tim
>>>>>>
>>>>>> _______________________________________________
>>>>>> sqlite-dev mailing list
>>>>>> sqlite-...@sqlite.org
>>>>>> http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-dev
>>>>>>
>>>>>
>>>> _______________________________________________
>>>> sqlite-users mailing list
>>>> sqlite-users@sqlite.org
>>>> http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users
>>>>
>>>>
>>>
>>> --
>>> View this message in context:
>>> http://old.nabble.com/Re%3A--sqlite-dev--Why-I-always-got-error-SQLITE_MISUSE-21--*-Library-used-incorrectly-*--tp27075467p27095772.html
>>> Sent from the SQLite mailing list archive at Nabble.com.
>>>
>>> _______________________________________________
>>> 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
>>
>>
>
> --
> View this message in context: 
> http://old.nabble.com/Re%3A--sqlite-dev--Why-I-always-got-error-SQLITE_MISUSE-21--*-Library-used-incorrectly-*--tp27075467p27110812.html
> Sent from the SQLite mailing list archive at Nabble.com.
> _______________________________________________
> 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