关于一个线程的问题(急)

yangdu328 2009-06-07 10:25:11
我有一个线程定时扫描一个表,如果发现表中有记录,就将所有的内容发送到对应的手机上,然后删除该记录并在另一个表中做日志记录,现在有一个奇怪的问题,如果进行删除等业务操作,则每次只发送一条,其他的得等线程sleep结束后再发送一条,以此类推,直到全部发送完;如果不进行删除等业务操作,则每次都能扫描表中所有的数据,请问是什么原因?(jdk1.5,Oracle 9i)
...全文
39 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
chinaboy2005 2009-06-07
  • 打赏
  • 举报
回复
贴出你的代码啊
shibenjie 2009-06-07
  • 打赏
  • 举报
回复
使用Statement执行完一个查询,又去执行另一个查询时这时候第一个查询的结果集就会被关闭,也就是说,所有的Statement的查询对应的结果集是一个,如果调用Connection的commit()方法也会关闭结果集。
而楼主是用Statement进行了两次操作,一次查询,一次删除。
建议一个Statement进行一次操作,因为进行一次操作后JDBC2.0和1.0提供的都是提交后ResultSet就会被关闭
JDBC3.0中,我们可以设置ResultSet是否关闭。要完成这样的ResultSet的对象的创建,要使用的Statement的创建要具有三个参数,这个Statement的创建方式也就是,我所说的Statement的第三种创建方式。如下:
Statement st=createStatement(int resultsetscrollable,int resultsetupdateable,int resultsetSetHoldability)
ResultSet rs = st.excuteQuery(sqlStr);
前两个参数和两个参数的createStatement方法中的参数是完全相同的,这里只介绍第三个参数:
resultSetHoldability表示在结果集提交后结果集是否打开,取值有两个:
ResultSet.HOLD_CURSORS_OVER_COMMIT:表示修改提交时,不关闭数据库。
ResultSet.CLOSE_CURSORS_AT_COMMIT:表示修改提交时ResultSet关闭。
世宝宝 2009-06-07
  • 打赏
  • 举报
回复
看不太明白
xyz1982510 2009-06-07
  • 打赏
  • 举报
回复
很简单的问题,debug被。一下就跟中出来了。这么多的操作,要要写在一个事务里边去做。
zoutuo 2009-06-07
  • 打赏
  • 举报
回复
举个小例子。应该是你的哪部分逻辑写错了,导致这个结果。
yangkangoo12 2009-06-07
  • 打赏
  • 举报
回复
你是不是查询操作和删除操作在同一个connection里面?
当生成 ResultSet 对象的 Statement 对象关闭、重新执行或用来从多个结果的序列检索下一个结果时,ResultSet 对象会自动关闭。
我猜你的程序应该是这样写的吧,先去查表中的记录 然后
while(rs.next){
//先将内容发送到手机
......
//删除该记录并在另一个表中做日志记录
......
}
当你执行删除操作的时候你查询的ResultSet 对象被自动关闭了,然后rs.next就会等于false 所以每次只发送了一条 然后此线程结束sleep直到再次启动继续发送一条,以此类推。
建议你先把查出的结果放在list里面 然后遍历list进行发送和删除操作

67,538

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧