JDBC—使用事物的基本格式

/**
  * 关于事物:
  * 1.如果多个操作,每个操作使用的是自己的单独的连接,则无法保证事物
  * 2.具体步骤:
  * 1) 事物操作开始前,开始事物:取消 Connection 的默认提交行为
  * 2) 如果事物的操作都成功,则提交事物:connection.commit();
  * 3) 回滚事物:如出现异常,则在 catch 块中回滚事物: connection.rollback();
  */
 @Test
 public void testTransaction(){
  Connection connection = null;
  try {
   connection = JDBCTools.GetConnection();
   System.out.println(connection.getAutoCommit());
   //开始事物(取消默认提交):
   connection.setAutoCommit(false);
   String sql = "UPDATE mytable SET name = " +
     "ARMD WHERE id = 6";
    update(connection, sql);

   int i = 10 / 0;    //异常
   System.out.println(i);
   
     sql = "UPDATE mytable SET name = " +
     "AFCD WHERE id = 5";
   update(connection, sql);
   
   //提交事物
   connection.commit();
   
  } catch (Exception e) {
   e.printStackTrace();
   //回滚事物
   try {
    connection.rollback();
   } catch (SQLException e1) {
    e1.printStackTrace();
   }
   
  } finally{
   JDBCTools.release(null, null, connection);
  }
 }
 private void update(Connection connection, String sql, Object...args) {

  PreparedStatement preparedStatement = null;
  try {
   preparedStatement = connection.prepareStatement(sql);
   for(int i = 0; i < args.length; i++){
    preparedStatement.setObject(i + 1, args[i]);
   }
   preparedStatement.executeUpdate();
  } catch (Exception e) {
   e.printStackTrace();
  } finally{
   JDBCTools.release(null, preparedStatement, connection);
  }
 }

你可能感兴趣的:(JDBC—使用事物的基本格式)