给出一个java事务的完整例子
时间: 2023-10-21 10:03:58 浏览: 80
以下是一个Java事务的完整例子:
```java
import java.sql.*;
public class TransactionExample {
static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
static final String DB_URL = "jdbc:mysql://localhost/EMP";
static final String USER = "username";
static final String PASS = "password";
public static void main(String[] args) {
Connection conn = null;
Statement stmt = null;
try {
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection(DB_URL, USER, PASS);
conn.setAutoCommit(false);
stmt = conn.createStatement();
String sql1 = "UPDATE Employees SET age = age + 1 WHERE id = 1";
stmt.executeUpdate(sql1);
String sql2 = "UPDATE Employees SET age = age - 1 WHERE id = 2";
stmt.executeUpdate(sql2);
conn.commit();
System.out.println("Transaction completed successfully.");
} catch (SQLException se) {
try {
if (conn != null) {
conn.rollback();
}
} catch (SQLException e) {
e.printStackTrace();
}
se.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (stmt != null) {
stmt.close();
}
} catch (SQLException se2) {
}
try {
if (conn != null) {
conn.close();
}
} catch (SQLException se) {
se.printStackTrace();
}
}
}
}
```
在这个例子中,我们使用了MySQL数据库,并且在程序中使用了两个更新语句。这些更新语句被包含在一个事务中,通过设置 `conn.setAutoCommit(false)` 禁止了自动提交,因此这些语句只有在 `conn.commit()` 被调用之后才会生效。
如果在执行这些更新语句的过程中发生了异常,那么我们会在 `catch` 块中捕获这个异常,并且通过调用 `conn.rollback()` 将事务回滚到之前的状态。如果所有操作执行成功,那么我们就可以通过调用 `conn.commit()` 来提交事务并完成整个操作。
阅读全文