package cn.com;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.Savepoint;
/**
* JDBC事务的保存点处理。
*
* 在JDBC的事物处理中,可以应用保存点技术,对一个事物中的处理进行部分提交。
*/
public class SavePoint {
/**
* 1.开始要把connection设置成不进行自动提交
*
* 2.中间设定保存点
*
* 3.回滚的地方要使用保存点
*
* 4.最后不要忘记进行commit
*
* @throws Exception
*/
public static void savepoint() throws Exception {
// 加载驱动类
System.setProperty("jdbc.drivers", "com.mysql.jdbc.Driver");
Connection conn = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/school", "root", "123456");
// 初始化不自动提交
conn.setAutoCommit(false);
// 张三减10元
String sql = "update user set money = money - 10 where id = 1";
PreparedStatement st = conn.prepareStatement(sql);
st.executeUpdate();
// 李四加10元
sql = "update user set money = money + 10 where id = 2";
st = conn.prepareStatement(sql);
st.executeUpdate();
// 设立保存点
Savepoint sp = conn.setSavepoint();
// 李四加再加100元(SQL的where关键字写的不对,会出现异常)
sql = "update user set money = money + 100 wherewhere id = 2";
st = conn.prepareStatement(sql);
try {
st.executeUpdate();
} catch (Exception e) {
// 回滚到李四加10元后的状态
conn.rollback(sp);
System.out.println("回滚到李四加10元后的状态");
}
conn.commit();
st.close();
conn.close();
}
public static void main(String[] args) throws Exception {
savepoint();
}
}
JDBC事务的保存点处理
最新推荐文章于 2021-10-28 10:11:27 发布