更新時間:2022-04-22 09:58:49 來源:動力節(jié)點(diǎn) 瀏覽2510次
在本教程中,動力節(jié)點(diǎn)小編將告訴大家JDBC中的事務(wù)管理。一個事務(wù)代表一組操作,用于執(zhí)行一項(xiàng)任務(wù)。
事務(wù)是一組命令,它將我們的數(shù)據(jù)庫從一個一致狀態(tài)帶到另一個一致狀態(tài)。
以下是關(guān)于 JDBC 中的事務(wù)管理的最重要的幾點(diǎn)。
事務(wù)意味著,它是一組用于執(zhí)行任務(wù)的操作。
事務(wù)可以達(dá)到成功狀態(tài)或失敗狀態(tài)。
如果所有操作都成功完成,則事務(wù)成功。
如果任何一個操作失敗,那么所有剩余的操作都將被取消,最終事務(wù)將進(jìn)入失敗狀態(tài)。
基本交易有兩種類型。
本地交易
全局/分布式事務(wù)
如果所有操作都在一個/同一個數(shù)據(jù)庫上執(zhí)行,則稱為本地事務(wù)。
如果操作在多個數(shù)據(jù)庫上執(zhí)行,則稱為全局事務(wù)。
示例: 如果我們將錢從account1轉(zhuǎn)移到同一家銀行的account2,則稱為本地交易。如果我們將錢從account1轉(zhuǎn)移到不同銀行的account2,則稱為全局或分布式交易。
JDBC 只能支持本地事務(wù)。對于分布式事務(wù),我們必須使用 EJB 技術(shù)或 Spring Framework。
大家對JDBC常用接口也有所了解,我們可以從 Connection 接口獲得 JDBC 中的 Transaction 支持。Connection 接口提供了 3 種在 JDBC 中執(zhí)行事務(wù)管理的方法。
設(shè)置自動提交()
犯罪()
回滾()
事務(wù) setAutoCommit() :
在開始操作之前,首先我們需要禁用自動提交模式。這可以通過調(diào)用 setAutoCommit(false) 來完成。
默認(rèn)情況下,從 java 程序完成的所有操作都將在數(shù)據(jù)庫中永久執(zhí)行。一旦永久執(zhí)行在數(shù)據(jù)庫中發(fā)生,我們就無法恢復(fù)它們(事務(wù)管理是不可能的)。
事務(wù)提交():
如果所有操作都成功執(zhí)行,那么我們通過調(diào)用commit()方法手動提交事務(wù)。
事務(wù)回滾():
如果任何一項(xiàng)操作失敗,那么我們通過調(diào)用rollback()方法取消事務(wù)。
connection.setAutoCommit(false);
try{
----------
----------
connection.commit();
}catch(Exception e){
connection.rollback();
}
package com.onlinetutorialspoint.jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
public class Jdbc_TransactionManagement_Example {
public static void main(String[] args) throws Exception {
Connection connection = null;
Statement statement = null;
try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
connection = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/onlinetutorialspoint", "root",
"123456");
connection.setAutoCommit(false);
statement = connection.createStatement();
statement
.executeUpdate("insert person values ('5001','Hyderabad','Chandra Shekhar')");
statement
.executeUpdate("insert person values ('5002','Banglore','Ram')");
connection.commit();
System.out.println("Transaction is commited.");
statement.close();
connection.close();
} catch (Exception e) {
e.printStackTrace();
connection.rollback();
}
}
}
輸出:
Transaction is committed.
如果我們更新語句
statement.executeUpdate("insert person values ('5003','Hyderabad','Chandra Shekhar')");
statement.executeUpdate("insert person values ('5001','Banglore','Ram')");
我們可以得到如下異常,事務(wù)將被回滾。
om.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Duplicate entry '5001' for key 'PRIMARY'
Transaction is rollbacked !
以上就是關(guān)于“JDBC事務(wù)管理示例”的介紹,大家如果想了解更多相關(guān)知識,可以關(guān)注一下動力節(jié)點(diǎn)的JDBC視頻教程,里面的課程內(nèi)容通俗易懂,適合沒有基礎(chǔ)的小伙伴學(xué)習(xí),希望對大家能夠有所幫助哦。
初級 202925
初級 203221
初級 202629
初級 203743