import java.sql.*;
public class TestDemo {
private static String driver = "com.mysql.jdbc.Driver";
private static String url = "jdbc:mysql:///test";
private static String user = "root";
private static String password = "";
/**
* 连接数据库的方法
*/
public static Connection getCon() throws Exception {
Class.forName(driver);
Connection con = DriverManager.getConnection(url, user, password);
return con;
}
/**
* 关闭数据库的方法
*/
public static void close(Connection con, PreparedStatement ps, ResultSet rs) throws Exception {
if (rs != null)
rs.close();
if (ps != null)
ps.close();
if (con != null)
con.close();
}
/**
* 测试
*/
@SuppressWarnings("unused")
public static void main(String[] args) throws Exception {
Connection con = null;
PreparedStatement ps1 = null;
PreparedStatement ps2 = null;
String sql = "update bank set money=money-500 where userid=1";
String sql2 = "update bank set money=money+500 where userid=2";
try {
con = getCon();
con.setAutoCommit(false);
ps1 = con.prepareStatement(sql);
int result1 = ps1.executeUpdate();
ps2 = con.prepareStatement(sql2);
int result2 = ps2.executeUpdate();
if (false)
throw new RuntimeException("模拟异常");
if (result1 == 1 && result2 == 1) {
System.out.println("转账成功!");
con.commit();
} else {
System.out.println("转账失败,已回滚!");
con.rollback();
}
} catch (Exception e) {
e.printStackTrace();
con.rollback();
System.out.println("转账失败,已回滚!");
} finally {
close(con, ps1, null);
close(con, ps2, null);
}
}
}
DROP TABLE IF EXISTS bank;
CREATE TABLE bank (id int(11) NOT NULL, userid int(11) NOT NULL, money varchar(20) NOT NULL, PRIMARY KEY (id));
INSERT INTO bank VALUES (1, 1, '10000'), (2, 2, '10000');