JDBC中使用事务是通过Connection对象的3个方法完成的:
connection.setAutoCommit(false); // 开户手动事务模式
connection.commit(); // 提交事务
connection.rollback(); // 如果执行失败,执行事务回滚
下面的代码演示了事务的使用方法。在这个例子里,第一件事和第二件事必须都执行成功。若一件事执行失败,将事务回滚,所有修改都取消。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
public class Transaction {
public static void main(String[] args) {
String url = "jdbc:mysql://127.0.0.1:3306/northwind";
String user = "northwind";
String password = "northwind";
Connection connection = null;
try {
connection = DriverManager.getConnection(url, user, password);
connection.setAutoCommit(false); // 开启手动事务模式
// 第一件事
Statement statement1 = null;
try {
statement1 = connection.createStatement();
statement1.executeUpdate("update employees set lastname='张' where id=1");
} finally {
if (statement1 != null) {
statement1.close();
}
}
// 第二件事
Statement statement2 = null;
try {
statement2 = connection.createStatement();
statement2.executeUpdate("update employees set lastname='谢' where id=2");
} finally {
if (statement2 != null) {
statement2.close();
}
}
// 提交事务
connection.commit();
} catch (SQLException e1) { //事务提交失败,执行事务圆润
try {
connection.rollback();
} catch (SQLException e) {
e.printStackTrace();
}
} finally { // 释放资源
if (connection != null) {
try {
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
}