SQLite DB被锁定异常,如果我还没玩过它,如何解锁呢?

时间:2011-07-01 17:38:26

标签: java sql sqlite

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();

以上是发生这种情况的代码。我在整个代码中做了一些功课,确定问题在于此代码,其他数据库查询工作得很好。什么东西都跳出来了?

1 个答案:

答案 0 :(得分:0)

在处理另一个查询的结果时,SQLite本身肯定可以处理查询。如果不能做到这一点,那将是非常无用的!如果您有一次打开数据库的两个连接,那么更有可能导致问题的可能性更大。我根本不知道DbAdapter类 - 不是它所在的包,或者是什么模块提供它 - 但是如果它假设它可以打开许多连接(或者如果它不能维持正确的连接卫生)那么那肯定是你所看到的那类问题的原因。先看看那里。