2011-03-12 93 views
4

我在我的模拟器的日志文件中得到了以下错误,我不知道该怎么做,因为谷歌搜索什么都没有。Android SQLite错误代码21

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. 

回答

8

我在SQLite C/C++ interface documentation发现

#define SQLITE_MISUSE  21 /* Library used incorrectly */ 

如果SQLite的API程序的一个或多个 使用 不当可能会出现此错误。不正确 用法的例子包括主叫sqlite_exec使用sqlite_close或调用 sqlite_exec与从两个 单独的线程相同的数据库 同时指针数据库已被关闭 之后。

我猜,这意味着你的代码是不正确的调用接口库周围线95716.

后来。 。 。

OP确认实际问题涉及两个线程同时访问数据库,一个尝试写入数据库,另一个尝试关闭它。我从这里推断出,有问题的代码行95716在模拟器中。 (因为OP的代码库只有1000行或更少)。

+0

只是这样。没有95716行,因为我的代码基本上只有1000行。但是你的评论指出了我的正确方向,因为我确实有一些线程可以与数据库一起工作,但是他们各自处理自己的连接,所以我必须更仔细地看一下这些代码。 – davidk01 2011-03-12 21:13:03

+0

嗯。它可能是指模拟器源中的95716行吗?你可以切换到不同的模拟器来测试这个想法吗? – 2011-03-12 21:16:59

+0

我选择在关闭数据库时使用锁,以便两个调用不会打开和关闭数据库。我认为这应该解决任何未来的问题。 – davidk01 2011-03-12 22:15:01