国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

JDBC詳解(六):數(shù)據(jù)庫事務(wù)(超詳解)

這篇具有很好參考價值的文章主要介紹了JDBC詳解(六):數(shù)據(jù)庫事務(wù)(超詳解)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。



前言

本博主將用CSDN記錄軟件開發(fā)求學(xué)之路上親身所得與所學(xué)的心得與知識,有興趣的小伙伴可以關(guān)注博主!也許一個人獨行,可以走的很快,但是一群人結(jié)伴而行,才能走的更遠!

一、數(shù)據(jù)庫事務(wù)介紹

  • 事務(wù):一組邏輯操作單元,使數(shù)據(jù)從一種狀態(tài)變換到另一種狀態(tài)。

  • 事務(wù)處理(事務(wù)操作):保證所有事務(wù)都作為一個工作單元來執(zhí)行,即使出現(xiàn)了故障,都不能改變這種執(zhí)行方式。當在一個事務(wù)中執(zhí)行多個操作時,要么所有的事務(wù)都被提交(commit),那么這些修改就永久地保存下來;要么數(shù)據(jù)庫管理系統(tǒng)將放棄所作的所有修改,整個事務(wù)**回滾(rollback)**到最初狀態(tài)。

  • 為確保數(shù)據(jù)庫中數(shù)據(jù)的一致性,數(shù)據(jù)的操縱應(yīng)當是離散的成組的邏輯單元:當它全部完成時,數(shù)據(jù)的一致性可以保持,而當這個單元中的一部分操作失敗,整個事務(wù)應(yīng)全部視為錯誤,所有從起始點以后的操作應(yīng)全部回退到開始狀態(tài)。

二、JDBC事務(wù)處理

  • 數(shù)據(jù)一旦提交,就不可回滾。

  • 數(shù)據(jù)什么時候意味著提交?

    • 當一個連接對象被創(chuàng)建時,默認情況下是自動提交事務(wù):每次執(zhí)行一個 SQL 語句時,如果執(zhí)行成功,就會向數(shù)據(jù)庫自動提交,而不能回滾。
    • **關(guān)閉數(shù)據(jù)庫連接,數(shù)據(jù)就會自動的提交。**如果多個操作,每個操作使用的是自己單獨的連接,則無法保證事務(wù)。即同一個事務(wù)的多個操作必須在同一個連接下。
  • JDBC程序中為了讓多個 SQL 語句作為一個事務(wù)執(zhí)行:

    • 調(diào)用 Connection 對象的 setAutoCommit(false); 以取消自動提交事務(wù)
    • 在所有的 SQL 語句都成功執(zhí)行后,調(diào)用 commit(); 方法提交事務(wù)
    • 在出現(xiàn)異常時,調(diào)用 rollback(); 方法回滾事務(wù)

    若此時 Connection 沒有被關(guān)閉,還可能被重復(fù)使用,則需要恢復(fù)其自動提交狀態(tài) setAutoCommit(true)。尤其是在使用數(shù)據(jù)庫連接池技術(shù)時,執(zhí)行close()方法前,建議恢復(fù)自動提交狀態(tài)。

【案例:用戶AA向用戶BB轉(zhuǎn)賬100】

public void testJDBCTransaction() {
	Connection conn = null;
	try {
		// 1.獲取數(shù)據(jù)庫連接
		conn = JDBCUtils.getConnection();
		// 2.開啟事務(wù)
		conn.setAutoCommit(false);
		// 3.進行數(shù)據(jù)庫操作
		String sql1 = "update user_table set balance = balance - 100 where user = ?";
		update(conn, sql1, "AA");

		// 模擬網(wǎng)絡(luò)異常
		//System.out.println(10 / 0);

		String sql2 = "update user_table set balance = balance + 100 where user = ?";
		update(conn, sql2, "BB");
		// 4.若沒有異常,則提交事務(wù)
		conn.commit();
	} catch (Exception e) {
		e.printStackTrace();
		// 5.若有異常,則回滾事務(wù)
		try {
			conn.rollback();
		} catch (SQLException e1) {
			e1.printStackTrace();
		}
    } finally {
        try {
			//6.恢復(fù)每次DML操作的自動提交功能
			conn.setAutoCommit(true);
		} catch (SQLException e) {
			e.printStackTrace();
		}
        //7.關(guān)閉連接
		JDBCUtils.closeResource(conn, null, null); 
    }  
}

其中,對數(shù)據(jù)庫操作的方法為:

//使用事務(wù)以后的通用的增刪改操作(version 2.0)
public void update(Connection conn ,String sql, Object... args) {
	PreparedStatement ps = null;
	try {
		// 1.獲取PreparedStatement的實例 (或:預(yù)編譯sql語句)
		ps = conn.prepareStatement(sql);
		// 2.填充占位符
		for (int i = 0; i < args.length; i++) {
			ps.setObject(i + 1, args[i]);
		}
		// 3.執(zhí)行sql語句
		ps.execute();
	} catch (Exception e) {
		e.printStackTrace();
	} finally {
		// 4.關(guān)閉資源
		JDBCUtils.closeResource(null, ps);

	}
}

三、事務(wù)的ACID屬性

  1. 原子性(Atomicity)
    原子性是指事務(wù)是一個不可分割的工作單位,事務(wù)中的操作要么都發(fā)生,要么都不發(fā)生。

  2. 一致性(Consistency)
    事務(wù)必須使數(shù)據(jù)庫從一個一致性狀態(tài)變換到另外一個一致性狀態(tài)。

  3. 隔離性(Isolation)
    事務(wù)的隔離性是指一個事務(wù)的執(zhí)行不能被其他事務(wù)干擾,即一個事務(wù)內(nèi)部的操作及使用的數(shù)據(jù)對并發(fā)的其他事務(wù)是隔離的,并發(fā)執(zhí)行的各個事務(wù)之間不能互相干擾。

  4. 持久性(Durability)
    持久性是指一個事務(wù)一旦被提交,它對數(shù)據(jù)庫中數(shù)據(jù)的改變就是永久性的,接下來的其他操作和數(shù)據(jù)庫故障不應(yīng)該對其有任何影響。

1、數(shù)據(jù)庫的并發(fā)問題

  • 對于同時運行的多個事務(wù), 當這些事務(wù)訪問數(shù)據(jù)庫中相同的數(shù)據(jù)時, 如果沒有采取必要的隔離機制, 就會導(dǎo)致各種并發(fā)問題:

    • 臟讀: 對于兩個事務(wù) T1, T2, T1 讀取了已經(jīng)被 T2 更新但還沒有被提交的字段。之后, 若 T2 回滾, T1讀取的內(nèi)容就是臨時且無效的。
    • 不可重復(fù)讀: 對于兩個事務(wù)T1, T2, T1 讀取了一個字段, 然后 T2 更新了該字段。之后, T1再次讀取同一個字段, 值就不同了。
    • 幻讀: 對于兩個事務(wù)T1, T2, T1 從一個表中讀取了一個字段, 然后 T2 在該表中插入了一些新的行。之后, 如果 T1 再次讀取同一個表, 就會多出幾行。
  • 數(shù)據(jù)庫事務(wù)的隔離性: 數(shù)據(jù)庫系統(tǒng)必須具有隔離并發(fā)運行各個事務(wù)的能力, 使它們不會相互影響, 避免各種并發(fā)問題。

  • 一個事務(wù)與其他事務(wù)隔離的程度稱為隔離級別。數(shù)據(jù)庫規(guī)定了多種事務(wù)隔離級別, 不同隔離級別對應(yīng)不同的干擾程度, 隔離級別越高, 數(shù)據(jù)一致性就越好, 但并發(fā)性越弱。

2、四種隔離級別

  • 數(shù)據(jù)庫提供的4種事務(wù)隔離級別:

JDBC詳解(六):數(shù)據(jù)庫事務(wù)(超詳解)

  • Oracle 支持的 2 種事務(wù)隔離級別:READ COMMITED, SERIALIZABLE。 Oracle 默認的事務(wù)隔離級別為: READ COMMITED 。

  • Mysql 支持 4 種事務(wù)隔離級別。Mysql 默認的事務(wù)隔離級別為: REPEATABLE READ。

3、在MySql中設(shè)置隔離級別

  • 每啟動一個 mysql 程序, 就會獲得一個單獨的數(shù)據(jù)庫連接. 每個數(shù)據(jù)庫連接都有一個全局變量 @@tx_isolation, 表示當前的事務(wù)隔離級別。

  • 查看當前的隔離級別:

    SELECT @@tx_isolation;
    
  • 設(shè)置當前 mySQL 連接的隔離級別:

    set  transaction isolation level read committed;
    
  • 設(shè)置數(shù)據(jù)庫系統(tǒng)的全局的隔離級別:

    set global transaction isolation level read committed;
    
  • 補充操作:

    • 創(chuàng)建mysql數(shù)據(jù)庫用戶:

      create user tom identified by 'abc123';
      
    • 授予權(quán)限文章來源地址http://www.zghlxwxcb.cn/news/detail-442678.html

      #授予通過網(wǎng)絡(luò)方式登錄的tom用戶,對所有庫所有表的全部權(quán)限,密碼設(shè)為abc123.
      grant all privileges on *.* to tom@'%'  identified by 'abc123'; 
      
       #給tom用戶使用本地命令行方式,授予atguigudb這個庫下的所有表的插刪改查的權(quán)限。
      grant select,insert,delete,update on atguigudb.* to tom@localhost identified by 'abc123'; 
      
      

到了這里,關(guān)于JDBC詳解(六):數(shù)據(jù)庫事務(wù)(超詳解)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 【Java 進階篇】深入理解 JDBC:Java 數(shù)據(jù)庫連接詳解

    【Java 進階篇】深入理解 JDBC:Java 數(shù)據(jù)庫連接詳解

    數(shù)據(jù)庫是現(xiàn)代應(yīng)用程序的核心組成部分之一。無論是 Web 應(yīng)用、移動應(yīng)用還是桌面應(yīng)用,幾乎都需要與數(shù)據(jù)庫交互以存儲和檢索數(shù)據(jù)。Java 提供了一種強大的方式來實現(xiàn)與數(shù)據(jù)庫的交互,即 JDBC(Java 數(shù)據(jù)庫連接)。本文將深入探討 JDBC 的各個方面,從基本概念到實際編程示例

    2024年02月07日
    瀏覽(26)
  • 【Java 進階篇】JDBC Connection詳解:連接到數(shù)據(jù)庫的關(guān)鍵

    【Java 進階篇】JDBC Connection詳解:連接到數(shù)據(jù)庫的關(guān)鍵

    在Java中,要與數(shù)據(jù)庫進行交互,需要使用Java數(shù)據(jù)庫連接(JDBC)。JDBC允許您連接到不同類型的數(shù)據(jù)庫,并執(zhí)行SQL查詢、插入、更新和刪除操作。在JDBC中,連接數(shù)據(jù)庫是一個重要的步驟,而 Connection 對象是實現(xiàn)這一目標的關(guān)鍵。本篇博客將詳細解釋 Connection 對象的作用、創(chuàng)建

    2024年02月05日
    瀏覽(22)
  • 【Java 進階篇】JDBC 數(shù)據(jù)庫連接池 C3P0 詳解

    【Java 進階篇】JDBC 數(shù)據(jù)庫連接池 C3P0 詳解

    數(shù)據(jù)庫連接池是數(shù)據(jù)庫編程中常用的一種技術(shù),它可以有效地管理數(shù)據(jù)庫連接,提高數(shù)據(jù)庫訪問的性能和效率。在 Java 編程中,有多種數(shù)據(jù)庫連接池可供選擇,其中之一就是 C3P0。本文將詳細介紹 C3P0 數(shù)據(jù)庫連接池的使用,包括原理、配置、常見問題和示例代碼,旨在幫助基

    2024年02月04日
    瀏覽(90)
  • JDBC 技術(shù) | Java連接MySQL數(shù)據(jù)庫(四萬字零基礎(chǔ)保姆級超全詳解)

    JDBC 技術(shù) | Java連接MySQL數(shù)據(jù)庫(四萬字零基礎(chǔ)保姆級超全詳解)

    管他啥是啥,看就完了!如果覺得博主寫的不錯,可以點贊關(guān)注支持一下博主哦!有什么地方存在不足或者錯誤的,煩請各位大佬在評論區(qū)指正。萬分感謝?。?本文結(jié)合了韓順平零基礎(chǔ)學(xué)java,黑馬程序員零基礎(chǔ)學(xué) JavaWeb,等多個視頻的相關(guān)知識內(nèi)容整理而來?;ㄙM了很多很多

    2024年02月05日
    瀏覽(88)
  • Microsoft SQL Server 2019 下載、安裝及Java JDBC配置連接數(shù)據(jù)庫(多圖詳解 超詳細)

    Microsoft SQL Server 2019 下載、安裝及Java JDBC配置連接數(shù)據(jù)庫(多圖詳解 超詳細)

    一、下載 下載鏈接Microsoft SQL Server 二、安裝 1.找到剛剛下載的文件,雙擊打開后,選擇基本并接受 2.選擇接受 3.選擇安裝位置,并點擊安裝,然后等待下載安裝完成 4.正在安裝 -5.遇到了一個問題,重啟一下(未遇到該問題的可忽略此步) 6.安裝成功,點擊安裝SSMS 7.點擊下載

    2024年02月04日
    瀏覽(61)
  • 4、hive的使用示例詳解-事務(wù)表、視圖、物化視圖、DDL(數(shù)據(jù)庫、表以及分區(qū))管理詳細操作

    4、hive的使用示例詳解-事務(wù)表、視圖、物化視圖、DDL(數(shù)據(jù)庫、表以及分區(qū))管理詳細操作

    1、apache-hive-3.1.2簡介及部署(三種部署方式-內(nèi)嵌模式、本地模式和遠程模式)及驗證詳解 2、hive相關(guān)概念詳解–架構(gòu)、讀寫文件機制、數(shù)據(jù)存儲 3、hive的使用示例詳解-建表、數(shù)據(jù)類型詳解、內(nèi)部外部表、分區(qū)表、分桶表 4、hive的使用示例詳解-事務(wù)表、視圖、物化視圖、DDL

    2024年02月09日
    瀏覽(26)
  • 數(shù)據(jù)庫設(shè)計、JDBC、數(shù)據(jù)庫連接池

    數(shù)據(jù)庫設(shè)計、JDBC、數(shù)據(jù)庫連接池

    數(shù)據(jù)庫設(shè)計概念 數(shù)據(jù)庫設(shè)計就是根據(jù)業(yè)務(wù) 系統(tǒng)的具體需求,結(jié)合我們所選用的DBMS,為這個業(yè)務(wù)系統(tǒng)構(gòu)造出最優(yōu)的數(shù)據(jù)存儲模型。 建立數(shù)據(jù)庫中的表結(jié)構(gòu)以及表與表之間的關(guān)聯(lián)關(guān)系的過程。 有哪些表?表里有哪些字段?表和表之間有什么關(guān)系? 數(shù)據(jù)庫設(shè)計的步驟 需求分析(數(shù)據(jù)是

    2024年02月19日
    瀏覽(21)
  • JDBC數(shù)據(jù)庫連接

    JDBC數(shù)據(jù)庫連接

    目錄 引言 ?一,基本概念 二,常用操作步驟 三,連接操作 ????????JDBC(Java DataBase Connectivity,java數(shù)據(jù)庫連接)是一種用于執(zhí)行SQL語句的Java API,可以為多種 關(guān)系數(shù)據(jù)庫提供統(tǒng)一訪問,它由一組用Java語言編寫的類和接口組成。JDBC提供了一種基準,據(jù)此可以構(gòu)建 更高級的工具

    2024年02月13日
    瀏覽(18)
  • JDBC連接數(shù)據(jù)庫

    JDBC連接數(shù)據(jù)庫

    目錄 一、JDBC概念 1.1Java操作數(shù)據(jù)庫的流程 1.2編寫代碼步驟 1.3具體操作 二、JDBC API詳解 2.1 DriverManager(驅(qū)動管理類) 作用 2.2 Connection(數(shù)據(jù)庫連接對象)作用: 2.3 Statement?? 2.4 ResultSet (結(jié)果對象集)作用 2.5 PreparedStatement? 三、數(shù)據(jù)庫連接池實現(xiàn) JDBC 就是使用 Java語言操作關(guān)系型

    2024年02月05日
    瀏覽(23)
  • 通過JDBC連接數(shù)據(jù)庫并用Java把數(shù)據(jù)寫入數(shù)據(jù)庫

    通過JDBC連接數(shù)據(jù)庫并用Java把數(shù)據(jù)寫入數(shù)據(jù)庫

    目錄 1.新建項目 2.在src包下新建lib包,用來存放jar包(下載對應(yīng)jar包復(fù)制到lib包里) 3.右鍵導(dǎo)入的jar包,找到并單擊\\\"添加到庫\\\"(add....) 4.在src包下新建bean包,新建class類 5.class類中寫數(shù)據(jù)庫表中對應(yīng)的列名的set get方法、空參、有參(String方法)注意:類名為私有類(private),新建類時數(shù)

    2024年02月02日
    瀏覽(98)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包