【问题标题】:SQLITE_BUSY The database file is locked (database is locked) in wicketSQLITE_BUSY 数据库文件被锁定(数据库被锁定)在 wicket
【发布时间】:2011-12-19 09:56:34
【问题描述】:

我在 wicket 做一个项目 如何解决问题。 我遇到了这样一个消息: WicketMessage:无法使用构造函数 public itucs.blg361.g03.HomePage() 实例化页面

根本原因:

java.lang.UnsupportedOperationException: [SQLITE_BUSY] 数据库文件被锁定(数据库被锁定) 在 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;  
}

在 itucs.blg361.g03.HomePage.(HomePage.java:71)

        categories = categoryCollection.getCategoryEvents();

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

【问题讨论】:

  • 好吧,异常说明了一切:数据库已锁定。这与检票口无关,但完全与您的数据库有关。另外,我建议使用适当的例外。 UnsupportedOperationException() 在这里出现语义错误。
  • 我是这样使用的:catch(Exception e) { e.printStackTrace();而不是这个:catch (SQLException ex) { throw new UnsupportedOperationException(ex.getMessage());现在看来没问题。还有其他想法吗?

标签: sqlite database-locking


【解决方案1】:

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

要从 Java 中执行此操作,请像简单的 SQL 语句一样运行以下语句:

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-26
      • 2019-02-05
      相关资源
      最近更新 更多