Bur*_*ğlı 4 sqlite database-locking
我在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;
}
Run Code Online (Sandbox Code Playgroud)
at itucs.blg361.g03.HomePage.(HomePage.java:71)
categories = categoryCollection.getCategoryEvents();
Run Code Online (Sandbox Code Playgroud)
在java.lang.reflect.Constructor.newInstance(Constructor.java:525)
Jan*_*dec 12
Sqlite一次只允许一个编写器访问整个数据库,除非您选择"WAL"日志模式,否则在编写时不会有读取器.此外,除非您明确要求它等待,否则它只会在运行冲突操作时返回任何尝试访问数据库的SQLITE_BUSY状态.
您可以告诉sqlite等待数据库在指定的时间内可用.C级API是sqlite3_busy_timeout
; 我从来没用过Java中的sqlite,所以我不知道在哪里找到它.
(...)告诉sqlite等待数据库在指定的时间内可用。
为了从Java执行此操作,请像简单的SQL语句一样运行以下语句:
pragma busy_timeout=30000; -- Busy timeout set to 30000 milliseconds
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
19617 次 |
最近记录: |