Java SQLite表已锁定

Java SQLite表已锁定,java,sqlite,locked,Java,Sqlite,Locked,在我的应用程序(使用Netbeans/Windows开发)中,我在主GUI中打开数据库,然后调用几个函数,每个函数将指定的表加载到内存中的数据结构中。连接作为参数传递给每个函数。我正在关闭所有语句、结果集。所有这些都非常有效。然后在进程中使用ProcessBuilder运行一个.exe(用C++创建)。exe生成一个文本文件。exe完成后,我需要删除现有的数据库表并将文本文件读入其中 现在,问题来了。尝试删除表时出现锁定表错误。请注意,exe不会对数据库或任何其他数据库执行任何操作 所以,问题是

在我的应用程序(使用Netbeans/Windows开发)中,我在主GUI中打开数据库,然后调用几个函数,每个函数将指定的表加载到内存中的数据结构中。连接作为参数传递给每个函数。我正在关闭所有语句、结果集。所有这些都非常有效。然后在进程中使用ProcessBuilder运行一个.exe(用C++创建)。exe生成一个文本文件。exe完成后,我需要删除现有的数据库表并将文本文件读入其中

现在,问题来了。尝试删除表时出现锁定表错误。请注意,exe不会对数据库或任何其他数据库执行任何操作


所以,问题是为什么会发生这种情况。顺便说一句,我使用的解决方法是在运行exe进程之前关闭连接,然后重新建立连接。这充其量也很尴尬。

一次只能有一个进程访问SQLite数据库。你不应该同时尝试从C++执行文件和java读取数据库。 有两种解决方案:

尝试删除C++可执行文件
  • 在运行exe进程之前断开Java GUI的连接,然后重新连接

  • 在我看来,第一个选项是正确的…

    谢谢。但是,正如我所说的,C++ .exe对任何数据库都毫无作用。有一天我会重写C++在爪哇,但现在需要保持它在C++…这是别人的代码,他不想每次更改都重新转换。如果我理解正确的话,你的第二个选择就是我现在正在做的工作。所以谜团依然存在。-1:SQLite可以很好地处理并发访问;从多个连接访问数据库不会损坏它(除非您有意禁用锁定)。最糟糕的情况是偶尔会出现忙错误,但在这种情况下,您可以稍等片刻,然后再试一次。您是否有打开的事务?取消对C++进程的调用会影响什么吗?如果看不到任何代码,很难提供帮助。