SQLITE_BUSY数据库文件在wicket中被锁定(数据库被锁定)

时间:2011-12-19 09:56:34

标签: sqlite database-locking

我在wicket做一个项目 如何解决问题。 我发现了这样一条信息: WicketMessage:无法使用构造函数public itucs.blg361.g03.HomePage()

实例化页面

根本原因:

java.lang.UnsupportedOperationException:[SQLITE_BUSY]数据库文件被锁定(数据库被锁定) at itucs.blg361.g03.CategoryEvents.CategoryEventCollection.getCategoryEvents(CategoryEventCollection.java:41)

 public List<CategoryEvent> getCategoryEvents() {
    List<CategoryEvent> categoryEvents = new 
            LinkedList<CategoryEvent>();
    try {
        String query = "SELECT id, name, group_id"
                + " FROM event_category";
        Statement statement =  this.db.createStatement();
        ResultSet result = statement.executeQuery(query);
        while (result.next()) {
            int id = result.getInt("id");
            String name = result.getString("name");
            int group_id = result.getInt("group_id");
            categoryEvents.add(new CategoryEvent(id, name, group_id));
        }
    } catch (SQLException ex) {
        throw new UnsupportedOperationException(ex.getMessage());
    }
        return categoryEvents;  
}

at itucs.blg361.g03.HomePage。(HomePage.java:71)

        categories = categoryCollection.getCategoryEvents();

在java.lang.reflect.Constructor.newInstance(Constructor.java:525)

2 个答案:

答案 0 :(得分:10)

Sqlite一次只允许一个编写器访问整个数据库,除非您选择“WAL”日志模式,否则编写时无需读者。此外,除非您明确要求它等待,否则它只会返回SQLITE_BUSY状态,以便在运行冲突的同时访问数据库。

您可以告诉sqlite等待数据库在指定的时间内可用。 C级API为sqlite3_busy_timeout;我从来没用过Java中的sqlite,所以我不知道在哪里找到它。

答案 1 :(得分:4)

  

(...)告诉sqlite等待数据库在指定的时间内可用。

为了从Java中执行此操作,请运行以下语句,就像一个简单的SQL语句:

pragma busy_timeout=30000; -- Busy timeout set to 30000 milliseconds