我有一个单线程应用程序,它在本地文件系统上的3个不同文件中使用3个SQLite数据库。为什么我会得到SQLException:数据库被锁定在我的JDBC 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.close
所有通话。每当有一个open()
,一个close()
紧随其后。
我也小心关闭我所有的Statement
(这将导致关联的ResultSet
也被关闭)。
所以我想我的数据库访问是干净的,因为我试图让他们尽可能短,并且我在不再需要它们时立即释放所有资源。
然而,我仍然得到java.sql.SQLException: database is locked
。
有没有什么我不正确的做法?我知道我没有显示任何代码,但是我不得不发布很多代码,它不会相关。我只是问我是否在这里使用最佳实践,因为我认为我这样做,而且我仍然遇到例外情况。
这是与Java 1.6,Xerial.org的sqlite的-JDBC-3.7.2驱动程序,在Mac OS 10.6的x64
可能是旧的应用程序正在运行吗?重新启动后这仍然会出现吗?因为据我所知这是每个嵌入式数据库的一个进程不是一个线程.... – Thihara
可能重复[java.sql.SQLException:数据库锁定](http://stackoverflow.com/questions/2578623/java-sql- sqlexception-database-locked) –
@Thihara:我已经'kill'了所有的java进程,仍然 –