MySql PreparedStatement用法 及 Transaction处理
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(); } } } }