关于JDBC的事务问题

zilaishuichina 2009-05-10 10:09:25
请问如何设置这样的事务,并且如何检测。

这样的一个需求:
当一个用户在对某条记录进行update的时候,若另一个用户正好想select这条记录,要求能显示“该条记录正在被操作,请稍候再试。”

我是这样写的:
try{
//执行select()
}catch(SQLException ex){
//此处如何检测抛出的SQLException是由事务引发的,而不是由其他情况引发的?
}
不知道思路是否正确,或者有其他的实现方法?
...全文
218 26 打赏 收藏 转发到动态 举报
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
qiheia 2009-05-31
  • 打赏
  • 举报
回复
[Quote=引用 23 楼 zilaishuichina 的回复:]
引用 22 楼 qiheia 的回复:
desc dba_dml_locks;
查看是否有所存在。。。。。。。。


SQL语句?
这条SQL不是很懂,在JDBC里面执行这条语句返回的是什么结果?能不能讲详细点?谢谢!
[/Quote]

你到sqlplus中执行下这条sql语句,就知道返回什么结果了,查看是否有所得存在。。。。
zilaishuichina 2009-05-31
  • 打赏
  • 举报
回复
再顶 等待答案
zilaishuichina 2009-05-30
  • 打赏
  • 举报
回复
自己顶
zilaishuichina 2009-05-29
  • 打赏
  • 举报
回复
[Quote=引用 22 楼 qiheia 的回复:]
desc dba_dml_locks;
查看是否有所存在。。。。。。。。
[/Quote]

SQL语句?
这条SQL不是很懂,在JDBC里面执行这条语句返回的是什么结果?能不能讲详细点?谢谢!
qiheia 2009-05-29
  • 打赏
  • 举报
回复
desc dba_dml_locks;
查看是否有所存在。。。。。。。。
zilaishuichina 2009-05-29
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 Busing 的回复:]
这个UPDATE的时候应该加锁吧!不属于事务的概念吧!
[/Quote]

加锁后 JDBC该如何检测这条记录被加锁了呢
zilaishuichina 2009-05-29
  • 打赏
  • 举报
回复
自己顶 期待答案
Busing 2009-05-28
  • 打赏
  • 举报
回复
这个UPDATE的时候应该加锁吧!不属于事务的概念吧!
zilaishuichina 2009-05-28
  • 打赏
  • 举报
回复
发现楼上各位大大可能都没有明白我的需求 我来解释一下

先回17楼 首先我要的不是“发贴的时候能看到沙发被占用”
而是 比如 这个版块有2个斑竹, 都对帖子有修改的权限, 当其中一个斑竹A对我的帖子执行了修改操作,提交给数据库执行的时候,另一个斑竹B恰好提交了查找的操作给数据库,而我的这个帖子又恰好符合斑竹B的查询条件,理论上我的帖子是结果集中的一个。

这个时候存在这样几种结果:
1、我的帖子不放入结果集,将其他未被操作的结果返回给斑竹B;
2、我的帖子放入结果集,但放入的是被斑竹A操作之前的值;
3、阻塞斑竹B的查找请求,等待斑竹A的更新请求COMMIT之后,将最新的结果放入结果集返回给斑竹B。
现在我的需求倾向于第2种,给出被操作之前的值,但同时要能给斑竹B这样一个提示:“您所查找的结果集中有部分记录正在被其他斑竹更改并尚未提交,未提交的记录已经给您标出,对于这些未提交的记录您可以稍后重新查找”

下面解释下我为什么有这样的需求, 如下图:

现实时间轴 A斑竹的请求 B斑竹的请求
0:0:0.0 事务开始
0:0:0.1 update 记录1
0:0:0.2 update 记录2
0:0:0.3 update 记录3 select 记录1,4,……
0:0:0.4 update 记录4
0:0:0.5 update 记录5
0:0:0.6 commit
那么 当B提交select的时候,尚不知道A的请求何时commit,所以对于这种情况,我不想阻塞B的请求,而是让B能查到,但同时通知B结果集存在脏读。

不知道各位大大明白我的意思了没有。
xnjnmn 2009-05-24
  • 打赏
  • 举报
回复
根本就没必要你想想CSDN
你正在写贴子准备抢沙发
而另外一个人正在写并且已经完成,发送了他抢了沙发
你发贴的时候是否看到沙发被占用了呢?

还有你打开同一个。TXT文件打开两个窗口
你在一个窗口修改文件,难道你在另一个窗口可以看到你的文件被修改了吗?--没有

以上两问题解决办法
CSDN只允许一个人打开该贴子并等他发完

一个文件只能用一个窗口打开文件共享到局域网的时候别人不能打开

你说的问题只有这样
在数据库加
悲观锁
一次只允许一个人做完之后才允许其他用户使用该表或行;
特点
1、不能并发 2、可移植性差;
有效保证数据。

关于悲观锁网上应该有很多列子 帮你搜了个--请参考(http://voole.javaeye.com/blog/347356)

qiheia 2009-05-24
  • 打赏
  • 举报
回复
行级所得问题

学习。。。。。。。
zilaishuichina 2009-05-24
  • 打赏
  • 举报
回复
哪为大大知道该怎么解决
zilaishuichina 2009-05-23
  • 打赏
  • 举报
回复
网吧键盘不太好使 打错了几个字 不好意思

我想要的是当一个用户在对某条数据UPDATE的时候 另一个想查找这条数据的人能查到被UPDATE之前的值 但同时能给出提示信息 “该条记录正在被更新,请稍后查找最新记录” 而不是等待UPDATE执行完再执行查找
zilaishuichina 2009-05-23
  • 打赏
  • 举报
回复
我想要的是当一个用户在对某条数据UODATE的时候 另一个想查找这条数据的人能查到被UDATE之前的值 但同时能给出提示信息 “该条记录正在被更新,请稍后查找最新记录” 而不是等待UDATE执行完再执行查找
qq707472 2009-05-18
  • 打赏
  • 举报
回复
这个问题应该是设置数据库来实现的吧
liuxinhongxin 2009-05-17
  • 打赏
  • 举报
回复
你是想查询时就检测脏读吗?似乎很少这种需求唉。
我觉得很多多用户操作的是提交时确定是否脏读。表增加version字段,每次更新操作,检查自己手中的version是否与表中的version一致,不一致不允许更新,证明读到了脏数据。
zilaishuichina 2009-05-17
  • 打赏
  • 举报
回复
急等答案
zilaishuichina 2009-05-16
  • 打赏
  • 举报
回复
我用的是 MYSQL的 数据库 隔离级别是支持的 就是不知道JDBC在处理由于事务而导致的出错时返回的是什么Exception
StruggleVIP 2009-05-10
  • 打赏
  • 举报
回复
支持楼上 需求不合理 第一用户使用行级锁
pathuang68 2009-05-10
  • 打赏
  • 举报
回复
楼主这个意思应该不是事务。你是想加读锁,很少有人这么做的,一般数据库绝大部分情况下支持“提交读”这种分离级别。
加载更多回复(6)

67,513

社区成员

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

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