日期:2014-05-19  浏览次数:21003 次

这样的事务如何实现啊

Connection conn = Util.getConnection();
conn.setAutoCommit(false);
String sql="select id from test"
int a = Util.select(conn,sql);
if(user=="用户A"){
运行时间很长的代码,。。。
}
if(a>0){
 sql = "update test set a="+(a-1);
 Util.update(conn,sql);
}
conn.commit();


test表中只有一个字段(id),只有一条记录值等于1(业务需要不能小于0,比如车票数)
假设有用户A和用户B两个人同时访问这个功能(用户A稍微提前一点点)
如何只让一个用户订票成功,而且程序效率挺高!

------解决方案--------------------
这种业务,一般情况下优先考虑做操作精简,比如:

把Update改为:
   Update test Set a=a-1 Where a > 0

然后注意到JDBC的executeUpdate(sql)函数会返回 int 型的值,这个值表示该Update语句究竟影响了多少行记录,那么Update失败的就是0,Update成功的应该是1。


所以你看只需要执行这个语句,从返回值就知道谁成功定到票了