事务是数据库管理系统中的一组操作,这些操作要么全部成功,要么全部失败,事务的ACID属性确保了数据库系统的可靠性和一致性。ACID是指:
-
Atomicity(原子性):事务中的所有操作要么全部完成,要么全部不完成。如果事务在执行过程中出现错误,所有已执行的操作都会被回滚(Undo),数据库回到事务开始前的状态。
-
Consistency(一致性):事务的执行不会违反数据库的完整性约束。事务开始之前和结束之后,数据库的状态必须是合法的,并且满足所有的约束条件。
-
Isolation(隔离性):事务的执行互不干扰,一个事务的执行结果在最终提交之前,对其他事务是不可见的。这保证了并发事务执行时的正确性。
-
Durability(持久性):一旦事务提交,事务对数据库的改变是永久性的,即使系统崩溃,数据也不会丢失。
在Java中管理事务
在Java中,管理事务通常通过JDBC(Java Database Connectivity)或JPA(Java Persistence API)来实现。下面分别介绍使用这两种方法管理事务的方式。
1. 使用JDBC管理事务
使用JDBC进行事务管理需要手动控制事务的开始、提交和回滚。下面是一个简单的示例:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class JdbcTransactionExample {
public static void main(String[] args) {
Connection conn = null;
PreparedStatement pstmt1 = null;
PreparedStatement pstmt2 = null;
try {
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydatabase", "user", "password");
conn.setAutoCommit(false); // 开始事务
String sql1 = "INSERT INTO Accounts (account_no, balance) VALUES (?, ?)";
pstmt1 = conn.prepareStatement(sql1);
pstmt1.setInt(1, 12345);