我有一个带有几个表的sqlite数据库。其中一个叫做studentsession。在我的代码中,我调用了很多次表,用于选择,插入,更新。过了一会儿,我收到了消息:
java.sql.SQLException:[SQLITE_BUSY]数据库文件被锁定(数据库被锁定)
调用的一个实例如下:
String query3 = "select * from studentssession where id= ? and math= ? and level = ?";
PreparedStatement pst__ = connectionUsers.prepareStatement(query3);
pst__.setString(1, x);
pst__.setString(2, x1);
pst__.setString(3, x2);
ts2 = pst__.executeQuery();
我试图弄清楚每次准备好的陈述是否有关闭,如果有这种情况导致我的问题。
编辑:是否可以使用例如javafx按钮检查数据库中可能的开放引用?
编辑:有没有办法可以检查我的代码是否在表的引用中存在问题并找到并可能关闭它们?
答案 0 :(得分:1)
这可能是由于您对sqlite数据库有多个开放引用。 我首先在while循环中的finally块中关闭PreparedStatement。
PreparedStatement pst__ = null;
try{
pst__ = connectionUsers.prepareStatement(query3);
pst__.setString(1, x);
pst__.setString(2, x1);
pst__.setString(3, x2);
ts2 = pst__.executeQuery();
}finally{
if(pst__ != null) {
pst__.close();
}
}
您还应该在所有内容结束时关闭数据库连接。
在连接到SQLite时使用多个连接也是一种不好的做法。参见
http://touchlabblog.tumblr.com/post/24474398246/android-sqlite-locking
将您的poolsize maxactive设置为1并试用。