10.8、事务
package com.kuang.lesson04;
import com.kuang.lesson02.utils.jdbcUtils;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class TestTransaction {
public static void main(String[] args) {
Connection con = null;
PreparedStatement st = null;
ResultSet rs = null;
try {
con = jdbcUtils.getConnection();
//关闭数据库的自动提交,自动会开启事务
con.setAutoCommit(false);//开启事务
String sql1 = "update account set money = money-100 where name = 'A'";
st = con.prepareStatement(sql1);
st.executeUpdate();
String sql2 = "update account set money = money+100 where name = 'B'";
st = con.prepareStatement(sql2);
st.executeUpdate();
//业务完毕,提交事务
con.commit();
System.out.println("成功!");
} catch (SQLException throwables) {
try {
con.rollback(); //如果失败就回滚
} catch (SQLException e) {
e.printStackTrace();
}
throwables.printStackTrace();
} finally {
jdbcUtils.release(con,st,rs);
}
}
}
package com.kuang.lesson04;
import com.kuang.lesson02.utils.jdbcUtils;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class TestTransaction {
public static void main(String[] args) {
Connection con = null;
PreparedStatement st = null;
ResultSet rs = null;
try {
con = jdbcUtils.getConnection();
//关闭数据库的自动提交,自动会开启事务
con.setAutoCommit(false);//开启事务
String sql1 = "update account set money = money-100 where name = 'A'";
st = con.prepareStatement(sql1);
st.executeUpdate();
int x = 1/0;
String sql2 = "update account set money = money+100 where name = 'B'";
st = con.prepareStatement(sql2);
st.executeUpdate();
//业务完毕,提交事务
con.commit();
System.out.println("失败!");
} catch (SQLException throwables) {
try {
con.rollback(); //如果失败就默认回滚,可以不写这一句
} catch (SQLException e) {
e.printStackTrace();
}
throwables.printStackTrace();
} finally {
jdbcUtils.release(con,st,rs);
}
}
}
10.9、数据库连接池