SQLITE_BUSY数据库文件在wicket中被locking(数据库被locking)
我正在做一个项目在wicket如何解决这个问题。 我碰到过这样的消息:WicketMessage:无法使用构造函数实例化页面public itucs.blg361.g03.HomePage()
根本原因:
java.lang.UnsupportedOperationException:[SQLITE_BUSY]数据库文件被locking(数据库被locking)在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)
Sqlite一次只允许一个写入者访问整个数据库,除非您select“WAL”日记模式,否则读者不会写入。 而且,除非您明确要求它等待,否则只要返回SQLITE_BUSY状态,以便在冲突操作正在运行时尝试访问数据库。
你可以告诉sqlite等待数据库在指定的时间内可用。 C级API是sqlite3_busy_timeout
; 我从来没有使用Java的SQLite,所以我不知道在哪里find它。
(…)告诉sqlite等待数据库在指定的时间内可用。
为了从Java中执行,像运行简单的SQL语句一样运行以下语句:
pragma busy_timeout=30000; -- Busy timeout set to 30000 milliseconds