SQLite&;Android:无法打开数据库文件-错误14

SQLite&;Android:无法打开数据库文件-错误14,android,database,sqlite,Android,Database,Sqlite,我看到类似的问题已经被报道了很多次。在我的例子中,我直接使用使用我自己的JNI库(而不是Android Java层)调用的“C”API以及最新的Mergalion 3.8.3。所以我可以控制我要处理的事情。 然后,在某些操作(更新)中,我收到一个错误,指出它无法打开数据库文件。我不理解INSERT语句,只理解UPDATE。 当我激活SQLite错误回调时,我看到以下内容: 无法在[6c643e45c2]os_unix.c:29299:(13)的第29299行打开文件 open(./etilqs_

我看到类似的问题已经被报道了很多次。在我的例子中,我直接使用使用我自己的JNI库(而不是Android Java层)调用的“C”API以及最新的Mergalion 3.8.3。所以我可以控制我要处理的事情。 然后,在某些操作(更新)中,我收到一个错误,指出它无法打开数据库文件。我不理解INSERT语句,只理解UPDATE。 当我激活SQLite错误回调时,我看到以下内容:

无法在[6c643e45c2]os_unix.c:29299:(13)的第29299行打开文件 open(./etilqs_1zMsiYdpXhd3JqY)-语句在36处中止:[更新] …]

再进一步挖掘,它似乎与日志文件有关。当我使用pragma将journal_模式设置为MEMORY时,问题就消失了。但所有其他模式,如WAL或TRUNCATED,都会导致相同的错误

在调试eclipse中的代码时,我可以看到在执行插入时创建的-journal文件。然后在事务完成时被删除。它告诉我它对目录(/data/data/)有足够的权限

请注意,完全相同的代码(C&Java)在Windows上运行得非常好,我没有发现错误。安卓系统和文件访问系统肯定有一些进展

我有办法系统地再现错误。如果有人对我应该检查什么有一些想法,那么我很乐意进行一些实验并报告结果。

回答太晚了

当使用多线程时,我看到了同样的问题

在第一个查询中发送下一个语句查询

PRAGMA temp_store_directory='some writeable path'

SQLITE3文档说“已弃用”,但。。这对我有用

真的不赞成吗

祝你好运


另外,我的sqlite3版本是[sqlite-MEGALION-3100200]

这是一个临时文件。您是如何配置SQLite库副本的临时路径的?我没有进行任何配置。执行INSERT时,我看到日志文件创建在与DB相同的目录中。但在执行更新时失败。这不是日志文件。这是一个临时文件。当前目录(
/
)不一定是数据库文件的目录。对,但在处理事务期间,我可以在Eclipse中看到从文件资源管理器创建的-journal文件。您必须访问[Link][1]。它肯定会解决你的问题。谢谢[1]:这是正确的,只要看看与
etilqs
相关的源代码,sqlite将其临时文件存储到
/tmp
/usr/tmp
,但Android没有该文件夹。使用这个不推荐使用的API似乎是唯一的答案。(sqlite有很多方法可以使用temp目录,所以只要把它放在
onConfigure
方法中,就可以解决很多问题了)。这对我来说很有效。实际上,我正在将temp路径设置为数据库的父目录,它可以正常工作。我将向SQLite团队提交一个问题。