最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

JDBC事務(wù)

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

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

事務(wù)的ACID屬性

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

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

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)該對其有任何影響。

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

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

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

JDBC批量執(zhí)行

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

JDBC的批量處理語句包括下面兩個方法:

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

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

clearBatch();清除批量打包

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

多條SQL語句的批量處理;

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();
    }
}

一個SQL語句的批量傳參;

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語句,有兩個處理的接口,一個PreparedStatement,Statement,一般操作JDBC比較用得多的還是PreparedStatement

不過在執(zhí)行批量,PreparedStatement有點不夠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();

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

可是把PreparedStatement放到里面就沒效了,以下:

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();

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

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

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

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

JDBC的批處理不能加入select語句,否則會拋異常:

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)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 淺析Java如何在并發(fā)環(huán)境下生成一個只讀的map

    淺析Java如何在并發(fā)環(huán)境下生成一個只讀的map

    這篇文章主要為大家詳細(xì)介紹了Java如何在并發(fā)環(huán)境下生成一個只讀的map,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-04-04
  • 詳解java設(shè)計模式中的門面模式

    詳解java設(shè)計模式中的門面模式

    門面模式又叫外觀模式(Facade?Pattern),主要用于隱藏系統(tǒng)的復(fù)雜性,并向客戶端提供了一個客戶端可以訪問系統(tǒng)的接口,本文通過實例代碼給大家介紹下java門面模式的相關(guān)知識,感興趣的朋友一起看看吧
    2022-02-02
  • java正則表達(dá)式用法大全(深度好文)

    java正則表達(dá)式用法大全(深度好文)

    這篇文章主要給大家介紹了關(guān)于java正則表達(dá)式用法大全的相關(guān)資料,正則表達(dá)式在處理字符串時非常有用,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-10-10
  • 基于JavaMail的Java郵件發(fā)送

    基于JavaMail的Java郵件發(fā)送

    電子郵件的應(yīng)用非常廣泛,例如在某網(wǎng)站注冊了一個賬戶,自動發(fā)送一封歡迎郵件,通過郵件找回密碼,自動批量發(fā)送活動信息等。本文將簡單介紹如何通過 Java 代碼來創(chuàng)建電子郵件,并連接郵件服務(wù)器發(fā)送郵件
    2021-10-10
  • Java?BigDecimal類用法詳解

    Java?BigDecimal類用法詳解

    本文詳細(xì)講解了Java?BigDecimal類的用法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-12-12
  • SpringBoot?全局線程池配置及應(yīng)用小結(jié)

    SpringBoot?全局線程池配置及應(yīng)用小結(jié)

    為了提高應(yīng)用程序的性能和響應(yīng)速度,線程池是一個非常重要的工具,本文主要介紹了Spring?Boot?全局線程池配置及應(yīng)用,具有一定的參考價值,感興趣的可以了解一下
    2024-05-05
  • spring boot 自定義starter的實現(xiàn)教程

    spring boot 自定義starter的實現(xiàn)教程

    下面小編就為大家分享一篇spring boot 自定義starter的實現(xiàn)教程,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2017-12-12
  • Java中同步與并發(fā)用法分析

    Java中同步與并發(fā)用法分析

    這篇文章主要介紹了Java中同步與并發(fā)用法,較為詳細(xì)的分析了java同步與并發(fā)所涉及的相關(guān)類與使用技巧,需要的朋友可以參考下
    2015-06-06
  • mybatis返回結(jié)果為Map問題

    mybatis返回結(jié)果為Map問題

    這篇文章主要介紹了mybatis返回結(jié)果為Map問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-04-04
  • SpringBoot將Bean放入容器的五種方式

    SpringBoot將Bean放入容器的五種方式

    這篇文章給大家介紹了SpringBoot將Bean放入容器的五種方式,文中通過代碼示例給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2024-02-02

最新評論

榆社县| 嵊泗县| 镇沅| 罗平县| 七台河市| 阿图什市| 赤壁市| 龙海市| 宜兰市| 新巴尔虎右旗| 尼勒克县| 伊宁市| 兴和县| 津南区| 山东| 博湖县| 咸阳市| 库车县| 洛南县| 荃湾区| 长宁县| 西平县| 栾川县| 平定县| 且末县| 玉环县| 伊吾县| 朝阳市| 夹江县| 右玉县| 临澧县| 丘北县| 禹城市| 眉山市| 千阳县| 高清| 台中县| 平罗县| 聊城市| 民权县| 茂名市|