为了做这个实验,设计个场景,要把用户2 上账户的22块钱打一块钱到账户1的账上去。要么全成功,全失败,也就是账要做平。
代码如下:
其中最关键的是:
updateMoneyByUserId(1, getMoneyByUserId(1) + 1,false); //这条语句是否回滚
updateMoneyByUserId(2, getMoneyByUserId(2) - 1,true); //设置抛出异常,
当用户2在打钱时抛出异常,没成功时,用户1的更新要回滚回来。在mysql connection中默认是自动提交的,需要设置为手动提交,然后才可用rollback方法进行回滚。
package com.test.transaction;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
/**
CREATE TABLE `usermoney` (
`user_id` int(11) NOT NULL DEFAULT '0',
`moneyNum` int(11) DEFAULT NULL,
PRIMARY KEY (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COMMENT='user for money';
INSERT INT