日期:2014-05-18  浏览次数:20684 次

java如何对数据库并发操作进行控制
一、现在要实现一个功能:
1、表tabf中主要字段:
  id 表的主键;
  status 当前记录的状态 1 待处理/2 处理中;
  usercode 操作当前记录的用户代码,当status为1时,该字段为空;
2、对tabf中的记录进行查询
  -->如果状态为“待处理”,则当用户点击该条记录时,将用户代码存入tabf.usercode中、并修改tabf.status为2(处理中);
  -->如果状态为“处理中”,则只有tabf.usercode对应的用户有权处理;

二、遇到的问题:
如果多用户同时点击某条状态为“待处理”的记录,则数据错误(多用户都可以修改其数据,数据库中记录的信息是最后一个用户的)。

三、想实现:
在用户点击“待处理”记录时触发的事务开始时就对数据记录进行上锁,直到该事务提交后放开。

四、程序情况:
1、java;
2、*DAO extends JdbcDaoSupport,因为根据系统情况需要自己写UPDATE,而没有用HibernateDaoSupport;
  在网上看到了不少对并发控制的解决方法,其中就有hibernate中的悲观锁和乐观锁,但是现在的情况是用不了。

如何解决?

------解决方案--------------------
可以执行update,根据返回的值来确定是否自己得到处理状态。不需要加锁。

如果加锁的话,效率太低。
------解决方案--------------------
加个version字段.......怎么就不能用乐观锁?

------解决方案--------------------
事务啊
------解决方案--------------------
考虑用存储过程吧