为什么我会收到 SQLException:数据库已锁定在我的 JDBC SQLite 数据库上?

2024-01-07

我有一个单线程应用程序,它在本地文件系统上的 3 个不同文件中使用 3 个 SQLite 数据库。

我创建了一个DbAdapter打开与 SQLite 数据库文件的连接的帮助程序类。在这堂课上我有一个open创建连接的方法,以及close释放一切的方法。

这 3 个数据库是从派生的类访问的DbAdapter.

在我的程序中,每个数据库访问如下所示:

MyDbAdapter DB = new MyDBAdapter();
int stuff = DB.getStuff(); // queries the database
DB.close();
// now do something with `stuff`

我已登录stdout所有呼叫DbAdapter.open and DbAdapter.close。每当有一个open(), a close()紧随其后。
我也小心翼翼地关闭了我所有的Statements(这将导致相关的ResultSet也将被关闭)。

所以我想我的数据库访问是干净的,因为我试图让它们尽可能短,并且一旦我不再需要它们,我就会释放所有资源。

然而,我仍然得到java.sql.SQLException: database is locked.

我有什么做得不够好的地方吗?我知道我没有显示任何代码,但我必须发布大量代码,但它们并不相关。我只是问我是否在这里使用了最佳实践,因为我认为我这样做了,而且我仍然遇到例外。

这是在 Mac OS 10.6 x64 上使用 Java 1.6、Xerial.org 的 sqlite-jdbc-3.7.2 驱动程序


我注意到我有一些无法杀死的奇怪 Java 进程。我跑:

ps aux | grep java | grep -v grep | awk '{print$2}' | xargs sudo kill -9

但那些进程仍然在这里(具有相同的 PID)。

我重新启动,问题不再出现。这是没有意义的,因为我能够进行大量数据库调用而不会发生任何崩溃,只有一个调用导致了异常。我完全不明白发生了什么,但我不再有这个问题。

Any real欢迎回答。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么我会收到 SQLException:数据库已锁定在我的 JDBC SQLite 数据库上? 的相关文章

随机推荐