- 什么叫事务
- 一组逻辑单元,使数据从一种状态换到另一种状态
- 事务的处理原则
- 保证所有事务都作为一个工作单元执行,即使出现了故障,都不能改变这种执行方式
- 当在一个事务执行多操作时,要么所有的事务都被提交(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);
}
}