SQLITE_BUSY Файл базы данных заблокирован (база данных заблокирована) в калитке - PullRequest
3 голосов
/ 19 декабря 2011

Я делаю проект в калитке Как решить проблему.Я сталкивался с таким сообщением: 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)

Ответы [ 2 ]

10 голосов
/ 19 декабря 2011

Sqlite допускает одновременную запись только одной записи во всю базу данных, и, если вы не выбрали режим журнала «WAL», во время записи не будет читателя. Более того, если вы явно не попросите его подождать, он просто возвращает статус SQLITE_BUSY для любой попытки доступа к базе данных во время выполнения конфликтующей операции.

Вы можете указать sqlite подождать, пока база данных станет доступной в течение указанного времени. API уровня C - sqlite3_busy_timeout; Я никогда не использовал sqlite из Java, поэтому не знаю, где его найти.

4 голосов
/ 03 января 2016

(...) скажите sqlite ждать, пока база данных станет доступной в течение указанного промежутка времени.

Чтобы сделать это из Java,выполните следующий оператор, как простой оператор SQL:

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