首先执行下列sql语句:
USE `jdbcstudy`;
-- 创建账户表
CREATE TABLE account(
`id` INT(10) PRIMARY KEY AUTO_INCREMENT,
`name` VARCHAR(40),
`money` FLOAT
);
-- 插入测试数据
INSERT INTO `account`(`name`,`money`) VALUES('A',1000);
INSERT INTO `account`(`name`,`money`) VALUES('B',1000);
INSERT INTO `account`(`name`,`money`) VALUES('C',1000);
示例;
package jdbc.lesson;
import jdbc.lesson.utils.JdbcUtils;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class JDBCAffairs {
public static void main(String[] args) {
Connection connection = null;
PreparedStatement preparedStatement = null;
ResultSet resultSet = null;
try {
connection = JdbcUtils.getConnection();
// 关闭数据库的自动提交,会自动开启事务
connection.setAutoCommit(false);// 开启事务
String sql01 = "UPDATE account SET money = money-100 WHERE NAME = \"A\";";
preparedStatement = connection.prepareStatement(sql01);
preparedStatement.executeUpdate();
String sql02 = "UPDATE account SET money = money+100 WHERE NAME = \"B\";";
preparedStatement = connection.prepareStatement(sql02);
preparedStatement.executeUpdate();
// 业务完毕 执行事务
connection.commit();
connection.setAutoCommit(true);
System.out.println("操作成功");
} catch (SQLException e) {
try {
// 如果失败则回滚事务(如果不写,默认也会回滚)
connection.rollback();
} catch (SQLException e1) {
e1.printStackTrace();
}
e.printStackTrace();
} finally {
JdbcUtils.release(connection, preparedStatement, null);
}
}
}
运行结果:
小结
- 开启事务
connection.setAutoCommit(false);
- 一组业务执行完毕,提交事务。
- 可以在catch语句中显示的定义回滚语句,但默认失败就会回滚。