Jdbc操作事務(提交、回滾)----以銀行轉賬為例
阿新 • • 發佈:2018-12-06
以銀行轉賬為例----Jdbc操作事務(提交、回滾)
private Statement statement; private Connection conn; @Test public void test01() throws Exception { Class.forName("com.mysql.jdbc.Driver"); conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/db2", "root", "root"); statement = conn.createStatement(); zz(500, "xiaoming", "xiaohua"); statement.close(); conn.close(); } public void zz(Integer money, String from, String to) throws Exception { conn.setAutoCommit(false);//開啟事務 ResultSet resultSet = statement.executeQuery("select balance from account WHERE name='" + from + "'"); if (resultSet.next()) { int balance = resultSet.getInt("balance"); if (balance >= money) { statement.execute("update account set balance=balance-" + money + " where name='" + from + "'"); statement.execute("update account set balance=balance+" + money + " where name='" + to + "'"); } else { conn.rollback();//回滾 System.out.println("轉賬失敗...."); } } conn.commit();//提交事務 }