sqlite4java多线程支持解决方案

时间:2011-05-27 23:21:11

标签: java sqlite

我正在尝试用游戏实现Java Swing GUI App。游戏将计算在5秒内点击按钮的次数。

我在我的一个Java GUI项目中使用sqlite4java。它非常简约,因此只支持单线程应用程序。

我希望在5秒钟后执行一些SQL查询。我在我的按钮的onclick监听器中启动了一个Thread,其run()方法实现如下:

run() {
 timeLeft = 5;
 score = 0;
 while(timeLeft>0)
      Thread.sleep(100);
      timeLeft -= 0.1;
      update left time on GUI;
  }
  // time is up
  execute some SQLite INSERT query here;
}

由于sqlite4java支持单线程,因此会引发异常:

SQLite error:com.almworks.sqlite4java.SQLiteException:
[-98] DB[1] confined(Thread[main,5,]) used (Thread[Thread-3,6,main]) 

如何在线程完成后(线程外)执行?抛出异常是因为被调用者线程和实例化数据库的线程(主线程)不一样。

如何在此线程终止后使主线程发出信号(并在主线程中处理此信号)?

我想要实现的只是执行查询以将用户的分数添加到高分列表中。这不是一个功课,我正在尝试为自己的ORM框架开发一个概念验证应用程序。

2 个答案:

答案 0 :(得分:9)

正如@corlettk建议的那样,你需要一个单独的线程来进行数据库操作。 sqlite4java附带SQLiteQueue,它可以为您完成。有tutorialjavadoc with example

确保使用SQLiteJob包装所有数据库操作并将它们传递给队列。

希望这有帮助! 伊戈尔

答案 1 :(得分:0)

艾哈迈德,

我猜你必须在一个线程上做你所有的“数据库内容”(包括dis / connect),这应该是专门用于此目的的;甚至可能“隐藏”在请求队列后面。

祝你好运。你能“只”换掉RDBMS吗?

干杯。基思。