首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >sqlite4java多线程支持解决方案

sqlite4java多线程支持解决方案
EN

Stack Overflow用户
提问于 2011-05-28 07:21:11
回答 2查看 3K关注 0票数 1

我正在尝试用一个游戏实现一个Java Swing GUI应用程序。这个游戏是计算一个按钮在5秒内被点击了多少次。

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

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

代码语言:javascript
复制
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是单线程支持的,它会抛出一个异常:

代码语言:javascript
复制
SQLite error:com.almworks.sqlite4java.SQLiteException:
[-98] DB[1] confined(Thread[main,5,]) used (Thread[Thread-3,6,main]) 

我怎么可能在线程结束后执行(在线程之外)?它抛出异常,因为被调用者线程和实例化数据库的线程(主线程)不同。

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

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-05-28 15:59:54

正如@corlettk建议的那样,您需要有一个单独的线程来执行数据库操作。sqlite4java附带了SQLiteQueue,它可以为您做到这一点。有一个tutorialjavadoc with example

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

希望这能有所帮助!Igor

票数 9
EN

Stack Overflow用户

发布于 2011-05-28 07:32:55

艾哈迈德

我猜您必须在一个线程上执行所有的“数据库工作”(包括dis/connect),这个线程可能专门用于此目的;甚至可能“隐藏”在请求队列后面。

那就祝你好运。你能“直接”换掉RDBMS吗?

干杯。基思。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6158570

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档