- 什么叫事务
- 一组逻辑单元,使数据从一种状态换到另一种状态
- 事务的处理原则
- 保证所有事务都作为一个工作单元执行,即使出现了故障,都不能改变这种执行方式
- 当在一个事务执行多操作时,要么所有的事务都被提交(commi), 那么这些修改就永久地保存下来,要么数据库管理系统将放弃所作的所有修改,整个事务回滚(rollback)到最初的状态
- 哪些操作会导致数据的提交
- DDL操作一旦执行,都会提交
- DML默认情况下一旦执行,都会提交
- 关闭连接时,会自动提交
connection.setTransactionIsolation(找Connection类中的静态常量); // 修改事务级别
代码实现
public static void main(String[] args) throws Exception { ConnectionTest connectionTest = new ConnectionTest(); Connection connection = null; try { connection = ConnSql.conncationSql();// 创建连接对象 String sql1 = "UPDATE student SET sage = sage + 1 WHERE sid = ?"; String sql2 = "UPDATE student SET sage = sage - 1 WHERE sid = ?"; connectionTest.testTx(connection, sql1, 1); // 执行sql语句(使用下面的方法)// System.out.println(10 / 0); connectionTest.testTx(connection, sql2, 2);// 执行sql语句(使用下面的方法) connection.commit(); } catch (Exception e) { if (connection != null) connection.rollback(); // 如果sql语句执行中出现问题,立即回滚 } finally { if (connection != null) { connection.close(); } } }
// 连接对象通过参数传递 public void testTx(Connection connection, String sql, Object... agrs) { PreparedStatement preparedStatement = null; try { connection.setAutoCommit(false); // 设置不自动提交 preparedStatement = connection.prepareStatement(sql); for (int i = 0; i < agrs.length; i++) { preparedStatement.setObject(i + 1, agrs[i]); } preparedStatement.executeUpdate(); // 执行语句 } catch (Exception e) { e.printStackTrace(); } finally { ConnSql.close(null, preparedStatement); } }