欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java JDBC批量執(zhí)行executeBatch方法詳解

 更新時(shí)間:2021年08月26日 15:00:01   作者:人情世故  
這篇文章主要介紹了Java JDBC批量執(zhí)行executeBatch方法詳解,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下

JDBC事務(wù)

在數(shù)據(jù)庫(kù)中,所謂事務(wù)是指一組邏輯操作單元,使數(shù)據(jù)從一種狀態(tài)變換到另一種狀態(tài)。為確保數(shù)據(jù)庫(kù)中數(shù)據(jù)的一致性,數(shù)據(jù)的操縱應(yīng)當(dāng)是離散的成組的邏輯單元:當(dāng)它全部完成時(shí),數(shù)據(jù)的一致性可以保持,而當(dāng)這個(gè)單元中的一部分操作失敗,整個(gè)事務(wù)應(yīng)全部視為錯(cuò)誤,所有從起始點(diǎn)以后的操作應(yīng)全部回退到開(kāi)始狀態(tài)。

事務(wù)的操作:先定義開(kāi)始一個(gè)事務(wù),然后對(duì)數(shù)據(jù)作修改操作,這時(shí)如果提交(COMMIT),這些修改就永久地保存下來(lái),如果回退(ROLLBACK),數(shù)據(jù)庫(kù)管理系統(tǒng)將放棄您所作的所有修改而回到開(kāi)始事務(wù)時(shí)的狀態(tài)。

事務(wù)的ACID屬性

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

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

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

4. 持久性(Durability)

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

在JDBC中,事務(wù)默認(rèn)是自動(dòng)提交的,每次執(zhí)行一個(gè) SQL 語(yǔ)句時(shí),如果執(zhí)行成功,就會(huì)向數(shù)據(jù)庫(kù)自動(dòng)提交,而不能回滾

為了讓多個(gè) SQL 語(yǔ)句作為一個(gè)事務(wù)執(zhí)行:

  1. 執(zhí)行語(yǔ)句前調(diào)用 Connection 對(duì)象的 setAutoCommit(false); 以取消自動(dòng)提交事務(wù)
  2. 在所有的 SQL 語(yǔ)句都成功執(zhí)行后,調(diào)用 commit(); 方法提交事務(wù)
  3. 在出現(xiàn)異常時(shí),調(diào)用 rollback(); 方法回滾事務(wù)。

JDBC批量執(zhí)行

當(dāng)需要成批插入或者更新記錄時(shí)。可以采用Java的批量更新機(jī)制,這一機(jī)制允許多條語(yǔ)句一次性提交給數(shù)據(jù)庫(kù)批量處理。通常情況下比單獨(dú)提交處理更有效率

JDBC的批量處理語(yǔ)句包括下面兩個(gè)方法:

addBatch(String):添加需要批量處理的SQL語(yǔ)句或是參數(shù);

executeBatch();執(zhí)行批量處理語(yǔ)句;

clearBatch();清除批量打包

通常我們會(huì)遇到兩種批量執(zhí)行SQL語(yǔ)句的情況:

多條SQL語(yǔ)句的批量處理;

for (int i = 1; i < 5000; i++) {
    sql = "insert into person(id,name,email) values(" + i",'name" + i + "','email" + i + "')";
    stmt.addBatch(sql);
    if((i+1)%1000==0){
        //批量處理
        stmt.executeBatch();
        //清除stmt中積攢的參數(shù)列表
        stmt.clearBatch();
    }
}

一個(gè)SQL語(yǔ)句的批量傳參;

for(int i=1;i<100000;i++){
    pstmt.setInt(1, i);
    pstmt.setString(2, "name"+i);
    pstmt.setString(3, "email"+i);
    pstmt.addBatch();
    if((i+1)%1000==0){
        //批量處理
        pstmt.executeBatch();
        //清空pstmt中積攢的sql
        pstmt.clearBatch();
    }
}

JDBC執(zhí)行SQL語(yǔ)句,有兩個(gè)處理的接口,一個(gè)PreparedStatement,Statement,一般操作JDBC比較用得多的還是PreparedStatement

不過(guò)在執(zhí)行批量,PreparedStatement有點(diǎn)不夠Statement

ps = conn.prepareStatement(sql);
for(int i = 0;i<10;i++){
    ps.setString(1,"1");
    //PreparedStatement批處理方式一
    ps.addBatch();
}
//PreparedStatement批處理方式二
ps.addBatch("靜態(tài)SQL");
ps.executeBatch();

這個(gè)是正常執(zhí)行的

可是把PreparedStatement放到里面就沒(méi)效了,以下:

for(int i = 0;i<10;i++){
   ps = conn.prepareStatement(sql);
   ps.setString(1,"1");
   ps.addBatch();
}
ps.executeBatch();

Statement適合循環(huán)賦值到sql,代碼以下:

Statement st = conn.createStatement();

for(int i = 0;i<10;i++){

   st.addBatch("靜態(tài)sql..........");

}

st.executeBatch();

這個(gè)是正常執(zhí)行所有的語(yǔ)句

總結(jié):造成這樣的原因是

Statement st = conn.createStatement();這里可以不放SQL語(yǔ)句

ps = conn.prepareStatement(sql);這個(gè)一定要放初始SQL語(yǔ)句

JDBC的批處理不能加入select語(yǔ)句,否則會(huì)拋異常:

java.sql.BatchUpdateException: Can not issue SELECT via executeUpdate(). 
at com.MySQL.jdbc.StatementImpl.executeBatch(StatementImpl.java:1007)

到此這篇關(guān)于Java JDBC批量執(zhí)行executeBatch方法詳解的文章就介紹到這了,更多相關(guān)Java JDBC批量執(zhí)行executeBatch內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringBoot整合screw實(shí)現(xiàn)自動(dòng)生成數(shù)據(jù)庫(kù)設(shè)計(jì)文檔

    SpringBoot整合screw實(shí)現(xiàn)自動(dòng)生成數(shù)據(jù)庫(kù)設(shè)計(jì)文檔

    使用navicat工作的話,導(dǎo)出的格式是excel不符合格式,還得自己整理。所以本文將用screw工具包,整合到springboot的項(xiàng)目中便可以自動(dòng)生成數(shù)據(jù)庫(kù)設(shè)計(jì)文檔,非常方便,下面就分享一下教程
    2022-11-11
  • ConcurrentMap.putIfAbsent(key,value)用法實(shí)例

    ConcurrentMap.putIfAbsent(key,value)用法實(shí)例

    這篇文章主要介紹了ConcurrentMap.putIfAbsent(key,value)用法實(shí)例,分享了相關(guān)代碼示例,小編覺(jué)得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2018-02-02
  • JAVA內(nèi)存溢出解決方案圖解

    JAVA內(nèi)存溢出解決方案圖解

    這篇文章主要介紹了JAVA內(nèi)存溢出解決方案圖解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-10-10
  • JPA自定義對(duì)象接收查詢結(jié)果集操作

    JPA自定義對(duì)象接收查詢結(jié)果集操作

    這篇文章主要介紹了JPA自定義對(duì)象接收查詢結(jié)果集操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-01-01
  • Java實(shí)現(xiàn)動(dòng)態(tài)獲取文件的絕對(duì)路徑

    Java實(shí)現(xiàn)動(dòng)態(tài)獲取文件的絕對(duì)路徑

    我們知道在?Java?中讀取一些配置文件信息,是在開(kāi)發(fā)中十分常用的要求。這篇文章就來(lái)和大家聊聊Java如何實(shí)現(xiàn)動(dòng)態(tài)獲取文件的絕對(duì)路徑,感興趣的可以了解一下
    2023-02-02
  • SpringSecurity?認(rèn)證實(shí)現(xiàn)流程分析

    SpringSecurity?認(rèn)證實(shí)現(xiàn)流程分析

    SpringSecurity框架通過(guò)一個(gè)過(guò)濾器鏈來(lái)處理認(rèn)證和授權(quán),主要包括UsernamePasswordAuthenticationFilter負(fù)責(zé)處理登錄請(qǐng)求,本文給大家介紹SpringSecurity?認(rèn)證實(shí)現(xiàn)登錄校驗(yàn),感興趣的朋友跟隨小編一起看看吧
    2024-10-10
  • gson對(duì)象序列化的示例

    gson對(duì)象序列化的示例

    本文介紹如何將Java對(duì)象序列化為Json文件,然后讀取該Json文件讀取回Java對(duì)象。在下面的示例中,我們創(chuàng)建了一個(gè)Student類。然后生成一個(gè)student.json文件,該文件將具有Student對(duì)象的json數(shù)據(jù)。
    2020-11-11
  • java鎖升級(jí)過(guò)程過(guò)程詳解

    java鎖升級(jí)過(guò)程過(guò)程詳解

    這篇文章主要介紹了Java鎖升級(jí)的實(shí)現(xiàn)過(guò)程,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-08-08
  • java實(shí)現(xiàn)6種字符串?dāng)?shù)組的排序(String array sort)

    java實(shí)現(xiàn)6種字符串?dāng)?shù)組的排序(String array sort)

    這篇文章主要介紹了java實(shí)現(xiàn)6種字符串?dāng)?shù)組的排序(String array sort),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-01-01
  • SpringBoot 2.6.x整合springfox 3.0報(bào)錯(cuò)問(wèn)題及解決方案

    SpringBoot 2.6.x整合springfox 3.0報(bào)錯(cuò)問(wèn)題及解決方案

    這篇文章主要介紹了SpringBoot 2.6.x整合springfox 3.0報(bào)錯(cuò)問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-01-01

最新評(píng)論