本文提供一個基於 JDK 內建 Apache Derby 內嵌資料庫的完整 JDBC 事務操作範例,涵蓋連線建立、關閉自動提交、增刪改查、提交/回滾、資源釋放等核心步驟。
// 關鍵步驟:關閉自動提交,開啟手動事務控制
conn.setAutoCommit(false);
try {
// 執行插入操作
psInsert.executeUpdate();
// 顯式提交
conn.commit();
// 模擬刪除後回滾
psDelete.executeUpdate();
conn.rollback(); // 刪除操作被撤銷
// 更新操作
psUpdate.executeUpdate();
conn.commit();
} catch (SQLException e) {
conn.rollback(); // 異常時回滾
e.printStackTrace();
} finally {
// 釋放所有資源
closeResources();
}
conn.setAutoCommit(false),預設為 true,每條 SQL 即時提交。conn.commit(),將當前事務內所有操作持久化。conn.rollback(),撤銷當前事務內未提交的操作,常用於 catch 區塊或業務邏輯失敗時。Savepoint 實現部分回滾。ArrayList 收集所有 Statement/PreparedStatement/ResultSet,統一在 finally 中關閉。DriverManager.getConnection("jdbc:derby:;shutdown=true") 會拋出特定異常(SQLState XJ015),屬正常關閉信號。@Transactional 註解可聲明式管理事務,減少樣板代碼。