安卓SQLite错误代码21

4

我在模拟器的日志文件中看到了以下错误,但是因为谷歌搜索没有结果,所以不知道该如何解决。

03-12 12:53:28.782: INFO/Database(688): sqlite returned: error code = 21, 
  msg = misuse detected by source line 95716
03-12 12:53:28.812: ERROR/Database(688): sqlite_config failed error_code = 21. 
  THIS SHOULD NEVER occur.
1个回答

8
我发现
#define SQLITE_MISUSE      21   /* Library used incorrectly */

SQLite C/C++界面文档中有可能出现此错误。

如果使用SQLite API例程时出现错误,就会发生此错误。例子包括在使用sqlite_close关闭数据库后调用sqlite_exec或同时从两个单独的线程调用具有相同数据库指针的sqlite_exec。

我猜这意味着你的代码在95716行左右错误地调用了接口库。

稍后……

OP确认实际问题涉及两个线程同时访问数据库,一个尝试写入数据库,而另一个尝试关闭数据库。 我可以推断出造成问题的代码行95716位于模拟器中。(因为OP的代码基本只有1000行或更少。)


但问题就在这里。我的代码库只有不到1000行,所以根本没有95716行。但是你的评论指引了我正确的方向,因为我确实有一些线程与数据库交互,但它们各自处理自己的连接,所以我需要更仔细地查看那部分代码。 - David K.
嗯,它可能是指模拟器源代码中的95716行吗?你能换一个不同的模拟器来测试这个想法吗? - Mike Sherrill 'Cat Recall'
我选择在关闭数据库时使用锁,以防止两个调用争夺打开和关闭数据库。我认为这应该可以解决任何未来的问题。 - David K.
3
如果这个方法可行,你应该将其写成答案并接受它。 - Mike Sherrill 'Cat Recall'
@Catcall:你指引了我正确的方向,因此如果你将我的评论添加到你的回答中,让其他人也能找到正确的问题区域并得到可能的解决提示,我不会介意,因为这份功劳应该归于你,而不是我。 - David K.
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接