我有一个单线程应用程序,它在本地文件系统上的 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()
紧随其后。
我也小心翼翼地关闭了我所有的Statement
s(这将导致相关的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(使用前将#替换为@)