事务的提交、回滚
不进行一致性时:
数据库Employee(no,name,ID_Card,year_Salary)
public void update(String sql,Object ... args) {
//声明Connection
Connection conn = null;
//声明PreparedStatement
PreparedStatement ps = null;
try {
//得到数据库连接
conn = JDBCTools.getConnection();
//得到PreparedStatement
ps = conn.prepareStatement(sql);
//填充占位符
for (int i = 0; i < args.length; i++) {
ps.setObject(i+1, args[i]);
}
//执行SQL
ps.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
} finally {
JDBCTools.closeResource(conn, ps, null);
}
}
进行测试(从1号员工转500给2号员工)
TransactionDemo td = new TransactionDemo();
@Test
void transactionTest() {
String sql = "update employee set year_Salary = year_Salary - 500 "
+ "where no = 1";
td.update(sql);
sql = "update employee set year_Salary = year_Salary + 500 "
+ "where no = 2";
td.update(sql);
}
正确
但是假如在两个sql语句中出现了异常
TransactionDemo td = new TransactionDemo();
@Test
void transactionTest() {
String sql = "update employee set year_Salary = year_Salary - 500 "
+ "where no = 1";
td.update(sql);
int j = 5/0;
sql = "update employee set year_Salary = year_Salary + 500 "
+ "where no = 2";
td.update(sql);
}
出现问题!
有关乎Connection的一些方法
-
//得到一个Connection
Connection conn = JDBCTools.getConnection(得到一个Connextion);
-
//取消默认提交
conn.setAutoCommit(false);
-
//提交事务
conn.commit();
-
//回滚事务
conn.rollBack();
TransactionDemo td = new TransactionDemo();
@Test
void transactionTest() {
Connection conn = null;
try {
conn = JDBCTools.getConnection();
//取消自动提交
conn.setAutoCommit(false);
String sql = "update employee set year_Salary = year_Salary - 500 "
+ "where no = 1";
td.update(conn,sql);
int j = 5/0;
System.out.println(j);
sql = "update employee set year_Salary = year_Salary + 500 "
+ "where no = 2";
td.update(conn,sql);
//提交事务
conn.commit();
} catch (Exception e) {
e.printStackTrace();
//回滚事务
try {
conn.rollback();
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
} finally {
JDBCTools.closeResource(conn, null, null);
}
}
即可