java.sql.SQLException: database is locked
at org.sqlite.DB.throwex(DB.java:288)
at org.sqlite.NestedDB.prepare(NestedDB.java:115)
at org.sqlite.DB.prepare(DB.java:114)
at org.sqlite.Stmt.executeQuery(Stmt.java:89)
当我进行查询时,我得到了这个例外。我在SA和Google上阅读了它,最常见的结论是有人开始制作另一个从未完成的查询。我遇到的问题是我之前从未在这台机器上对此DB进行过查询。我从我托管它的地方下载了db文件(我之前创建过它)并且没有用它做任何事情,所以我不知道它为什么会被锁定。当我使用一个名为SQLite数据库浏览器的程序进行查询时,它的工作正常。感谢您的帮助,如果需要,我会提供更多信息,请告诉我。
adapter = new DbAdapter();
ResultSet info;
ResultSet attributes;
for (int i = 1; i < 668; i++) {
if (i%50 == 0) {
System.out.print('.');
}
info = adapter.makeQuery("SELECT * FROM vehicles WHERE id = '" + i + "'");
attributes = adapter.makeQuery("SELECT * FROM vehicle_moves WHERE vehicle_id = '" + i + "'");
if(info.next()) {
base = new (info, attributes);
}
vehicleArray[i] = base;
}
System.out.println("Done.");
info.close();
attributes.close();
adapter.close();
以上是发生这种情况的代码。我在整个代码中做了一些功课,确定问题在于此代码,其他数据库查询工作得很好。什么东西都跳出来了?
答案 0 :(得分:0)
在处理另一个查询的结果时,SQLite本身肯定可以处理查询。如果不能做到这一点,那将是非常无用的!如果您有一次打开数据库的两个连接,那么更有可能导致问题的可能性更大。我根本不知道DbAdapter
类 - 不是它所在的包,或者是什么模块提供它 - 但是如果它假设它可以打开许多连接(或者如果它不能维持正确的连接卫生)那么那肯定是你所看到的那类问题的原因。先看看那里。