import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class TestJDBC {
/**
* 当银行转账时,需要在汇款人账户上扣除汇款金额,同时在收款人账户上存入汇款金额,
* 如果中间异常扣款但未实现转账,就需要事物处理,在出现异常情况下回滚到初始状态
*/
public static void main(String[] args) {
Connection conn = null;
PreparedStatement ps = null;
try {
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/aho", "root", "root");
//设置自动提交为false(默认为true)
conn.setAutoCommit(false);
ps =conn.prepareStatement("insert into person(id,name,age) values(?,?,?)");
ps.setInt(1, 1);
ps.setString(2, "李四");
ps.setInt(3, 18);
ps.addBatch();
ps.setInt(1, 1);
ps.setString(2, "李四");
ps.setInt(3, 18);
ps.addBatch();
ps.setInt(1, 1);
ps.setString(2, "李四");
ps.setInt(3, 18);
ps.addBatch();
ps.executeBatch();
//手动提交
conn.commit();
//设置回自动提交
conn.setAutoCommit(true);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
try {
if(conn!=null){
//遇到异常事物滚回,并设置初始自动提交为true
conn.rollback();
conn.setAutoCommit(true);
}
} catch (SQLException e1) {
e1.printStackTrace();
}
} finally {
try {
if(ps!=null){
ps.close();
ps = null;
}
if(conn!=null){
conn.close();
conn = null;
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}