5

私は改札でプロジェクトをやっています問題を解決する方法。そのようなメッセージに出くわしました: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)で

4

2 に答える 2

14

Sqlite では、データベース全体に対して一度に 1 つのライターのみが許可されます。また、"WAL" ジャーナル モードを選択しない限り、書き込み中にリーダーは許可されません。さらに、明示的に待機するように要求しない限り、競合する操作の実行中にデータベースにアクセスしようとすると、単に SQLITE_BUSY ステータスが返されます。

指定した時間、データベースが使用可能になるまで待機するように sqlite に指示できます。C レベル API は次のとおりですsqlite3_busy_timeout。ただし、Java から sqlite を使用したことがないため、どこにあるのかわかりません。

于 2011-12-19T11:13:01.377 に答える
7

(...)指定された時間、データベースが利用可能になるまで待機するように sqlite に指示します。

Java から実行するには、単純な SQL ステートメントのように次のステートメントを実行します。

pragma busy_timeout=30000; -- Busy timeout set to 30000 milliseconds
于 2016-01-02T22:28:30.040 に答える