java中的数据库事务处理
文章目录
在java也可以进行数据库的事务处理,一般使用try/catch捕获
注意:
- 事务只要开启了,就必须关闭(要么成功commit,要不失败rollback)
- 当前的事务只要已经提交了,就不可以回滚了
- 只要关闭了数据库当前的连接也会自动提交事务(保护机制)
-
模拟银行转账
public void bank() { Connection conn = null; PreparedStatement stateA = null; PreparedStatement stateB = null; // 事务处理 try{ // 获取连接 conn = JDBCUtils.getConnection(); // 关闭数据库自动提交---开启事务 conn.setAutoCommit(false); // 进行转账事务 -- A给B转500 // A的账户减少500 String sqlA = "update bank set b_account = b_account - 500 where b_name=?"; stateA = conn.prepareStatement(sqlA); stateA.setString(1, "A"); // B的账户增加500 String sqlB = "update bank set b_account = b_account + 500 where b_name=?"; stateB = conn.prepareStatement(sqlB); stateB.setString(1, "B"); // 提交事务 conn.commit(); // 成功 System.out.println("转账成功!"); } catch(Exception e) { try { // 如果出现异常,进行回滚 conn.rollback(); } catch (SQLException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } e.printStackTrace(); } finally { // 在关闭之前,把自动提交恢复 try { conn.setAutoCommit(true); } catch (SQLException e) { e.printStackTrace(); } // 关闭连接 JdbcConnect.release(conn, stateA, null); JdbcConnect.release(null, stateB, null); } }