事务:一个包含多个步骤的业务操作,如果这个业务操作被事务管理,则这多个步骤要么同时成功,要么同时失败
操作
1,开启事务
2,提交事务
3,回滚事务
使用connection对象来管理事务
开启事务:setAutoCommit(boolean autoCommit):调用该方法的设置参数false,即开启事务
执行SQL之前开启事务
提交事务:commit()
SQL执行完提交事务
回滚事务:rollback()
catch中回滚事务
public class JdbcDemo10 {
//事务操作
public static void main(String[] args) {
Connection connection = null;
PreparedStatement preparedStatement1=null;
PreparedStatement preparedStatement2 =null;
try {
connection = Jdbcutils.getConnection();
//开启事务
connection.setAutoCommit(false);
//张三-500
String sql1="update account set balance=balance-? where id=?";
//李四加500
String sql2="update account set balance=balance+? where id=?";
preparedStatement1 = connection.prepareStatement(sql1);
preparedStatement2 = connection.prepareStatement(sql2);
preparedStatement1.setDouble(1,500);
preparedStatement1.setInt(2,1);
preparedStatement2.setDouble(1,500);
preparedStatement2.setInt(2,2);
preparedStatement1.executeUpdate();
//制造异常
int i=3/0;
preparedStatement2.executeUpdate();
//提交事务
connection.commit();
} catch (SQLException throwables) {
//事务回滚
try {
if(connection!=null)
connection.rollback();
} catch (SQLException e) {
e.printStackTrace();
}
throwables.printStackTrace();
}finally {
Jdbcutils.close(null,preparedStatement1,connection);
Jdbcutils.close(null,preparedStatement2,null);
}
}
}