JDBC 批處理與事務處理:提升數據操作效率與一致性的密鑰

目錄

一. JDBC批量添加數據

1. 什么是批量添加數據

2. 實現數據的批量添加

a. 方式一:不分塊

二.?JDBC事務處理

1. 什么是事務

2. JDBC事務處理實現

三. 總結


前言

本文來講解JDBC的批處理和事務處理

這對數據的安全性和準確性以及高效率提供很好的辦法

話不多說,即刻發車~

個人主頁:藝杯羹

系列專欄:JDBC

一. JDBC批量添加數據

1. 什么是批量添加數據

在JDBC中通過PreparedStatement的對象的addBatch()executeBatch()方法進行數據的批量插入

  • addBatch():把若干SQL語句裝載到一起,然后一次性傳送到數據庫執行
    即是批量處理sql數據的。做數據的緩存
  • executeBatch():會將裝載到一起的SQL語句執行

注意:
MySql默認情況下是不開啟批處理

數據庫驅動從5.1.13開始添加了一個對rewriteBatchStatement的參數的處理,該參數能夠讓MySql開啟批處理。在url中添加該參數:rewriteBatchedStatements=true

Mysql的URL參數說明

參數名

取值范圍

作用說明

useUnicode

[true | false]

是否使用編碼集,需配合 characterEncoding 參數使用

characterEncoding

[utf-8 | gbk | ...]

編碼類型

useSSL

[true | false]

是否使用SSL協議

rewriteBatchedStatements

[true | false]

可以重寫向數據庫提交的SQL語句(開啟批處理)

這些參數都是添加在如下圖的這個 連接數據庫的URL當中

添加參數的格式:使用 ?來開始,之后的元素用 & 來添加
例如:
jdbc:mysql://localhost:8080/students?? useSSL=false &?rewriteBatchedStatements = true

這樣就開啟了批處理

2. 實現數據的批量添加

像沒有學批處理的話,一般是的思路是,去使用for循環去和數據庫交互n次,批量添加1000條數據,就會執行1000次executeUpdate(),交互數據庫1000次,交互的次數越多,效率和性能就越低

因此,我們批處理,先進行緩存,最后再進行一個執行,那么這樣就和數據庫交互的次數就很少了,效率和性能也就隨之大大增強了

a. 方式一:不分塊

public void addBatch1(){Connection connection = null;PreparedStatement ps = null;try{// 建立連接connection = JdbcUtils.getConnection();// 創建PreparedStatementps = connection.prepareStatement("insert into students values(default, ?, ?)");for(int i = 0; i < 100; i++){// 綁定studentnameps.setString(1, "studentname"+i);// 綁定studentageps.setInt(2, 18);// 緩存ps.addBatch();}// 執行sqlps.executeBatch();}catch(Exception e){e.printStackTrace();}finally{JdbcUtils.closeResource(ps, connection);}}

這里批處理是,所有的全部緩存完后才開始執行SQL語句。例如,這里是添加一百個學生信息,那么是一次性添加完,最后來執行。這就是不分塊,而是整塊

但是如果數據量太大,例如百萬條數據,JVM的內存肯定是會耗盡的,為了避免,就可以使用分塊的邏輯來寫,也就是,到達了某一個數量,就要執行一次addBatch緩存中的數據

b. 方式二:分塊

public void addBatch1(){Connection connection = null;PreparedStatement ps = null;try{// 建立連接connection = JdbcUtils.getConnection();// 創建PreparedStatementps = connection.prepareStatement("insert into students values(default, ?, ?)");for(int i = 1; i <= 10000; i++){// 綁定studentnameps.setString(1, "studentname"+i);// 綁定studentageps.setInt(2, 18);// 緩存ps.addBatch();// 如果緩存了100條數據,就執行if(i % 100 == 0){// 執行sqlps.executeBatch();//清除緩存ps.clearBatch();}}}catch(Exception e){e.printStackTrace();}finally{JdbcUtils.closeResource(ps, connection);}}

二.?JDBC事務處理

1. 什么是事務

事務是指作為單個邏輯工作單元執行的一系列操作,要么完全地執行,要么完全地不執行
只要有一方出錯,都不執行,這樣就確保了業務的正確性

事務操作流程:

  • 開啟事務
  • 提交事務
  • 回滾事務(撤銷)

JDBC中事務處理特點

在JDBC中,使用Connection對象來管理事務,默認為自動提交事務。可以通過setAutoCommit(boolean autoCommit)方法設置事務是否自動提交,參數為boolean類型,默認值為true,表示自動提交事務,如果值為false則表示不自動提交事務,需要通過commit方法手動提交事務或者通過rollback方法回滾事務

2. JDBC事務處理實現

注:因為第一篇文章里已經用JDBC工具類里封裝了提交和回滾事務的方法,如果不清楚的話,來看第一篇文章
傳送門:JDBC

public void addBatch1(){Connection connection = null;PreparedStatement ps = null;try{// 建立連接connection = JdbcUtils.getConnection();// 設置事務的提交方式,將自動提交修改為手動提交connection.setAutoCommit(false);// 創建PreparedStatementps = connection.prepareStatement("insert into students values(default, ?, ?)");for(int i = 0; i < 100; i++){// 綁定studentnameps.setString(1, "studentname"+i);// 綁定studentageps.setInt(2, 18);// 加入緩存 ps.addBatch();}// 提交事務JdbcUtils.commit(connection);}catch(Exception e){e.printStackTrace();// 如果出現錯誤就執行回滾數據JdbcUtils.rollback(connection);}finally{JdbcUtils.closeResource(ps, connection);}}

三. 總結

希望本文能夠對你有所幫助😊

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/78162.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/78162.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/78162.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

C++實現Atbash密碼

詳細說明 埃特巴什密碼是一種替換密碼&#xff0c;在該密碼中字母表中的字母是反向對應的。例如&#xff0c;A 會被替換為 Z&#xff0c;B 會被替換為 Y&#xff0c;依此類推。 #include <cassert> /// for assert #include <iostream> /// for IO operations #…

QuecPython+GNSS:實現快速定位

概述 QuecPython 結合 GNSS&#xff08;全球導航衛星系統&#xff09;模塊為物聯網設備提供開箱即用的定位能力解決方案。該方案支持 GPS/北斗/GLONASS/Galileo 多系統聯合定位&#xff0c;為物聯網開發者提供從硬件接入到云端服務的全棧式定位解決方案。 優勢特點 多體系定…

leetcode刷題日記——逆波蘭表達式求值

[ 題目描述 ]&#xff1a; [ 思路 ]&#xff1a; 借助棧的特性&#xff0c;遇見數字就將這個數壓入棧內&#xff0c;遇見符號&#xff0c;就從棧中彈出兩個數&#xff0c;進行相應的運算&#xff0c;然后將結果壓入棧中運行如下 int evalRPN(char** tokens, int tokensSize…

firewalld 詳解

firewalld 詳解 firewalld 是 Linux 系統中一個動態防火墻管理工具&#xff0c;取代了傳統的 iptables&#xff0c;提供更靈活、動態的規則配置&#xff0c;支持運行時修改且無需重載服務。以下是其核心概念、常用操作及示例指南&#xff1a; 一、核心概念 區域&#xff08;Zo…

面向高性能運動控制的MCU:架構創新、算法優化與應用分析

摘要&#xff1a;現代工業自動化、汽車電子以及商業航天等領域對運動控制MCU的性能要求不斷提升。本文以國科安芯的MCU芯片AS32A601為例&#xff0c;從架構創新、算法優化到實際應用案例&#xff0c;全方位展示其在高性能運動控制領域的優勢與潛力。該MCU以32位RISC-V指令集為基…

支付寶小程序組件與頁面構造器使用指南:從頁面到組件的正確遷移

引言 在支付寶小程序開發中&#xff0c;我們經常會遇到需要將頁面組件化的情況。本文將通過一個實際案例&#xff08;將 /pages/plugin/device 從頁面遷移到組件&#xff09;&#xff0c;深入分析支付寶小程序中頁面和組件的區別&#xff0c;以及正確的遷移方式。我們將從問題…

26-算法打卡-字符串-右旋字符串-第二十六天

1 題目說明 字符串的右旋轉操作是把字符串尾部的若干個字符轉移到字符串的前面。給定一個字符串 s 和一個正整數 k&#xff0c;請編寫一個函數&#xff0c;將字符串中的后面 k 個字符移到字符串的前面&#xff0c;實現字符串的右旋轉操作。 例如&#xff0c;對于輸入字符串 &qu…

fastbev mmdetection3D 角度和方向損失

角度/方向損失 sin(a?b)sinacosb?cosasinb config參數 dir_offset0.7854, # pi/4 dir_limit_offset0, box編解碼 # Copyright (c) OpenMMLab. All rights reserved. import torchfrom mmdet.core.bbox import BaseBBoxCoder from mmdet.core.bbox.builder import BBOX_COD…

極狐GitLab 如何 cherry-pick 變更?

極狐GitLab 是 GitLab 在中國的發行版&#xff0c;關于中文參考文檔和資料有&#xff1a; 極狐GitLab 中文文檔極狐GitLab 中文論壇極狐GitLab 官網 揀選(cherry-pick)更改 (BASIC ALL) 在 Git 中&#xff0c;cherry-pick 是從一個分支獲取一個提交并將其添加為另一個分支的…

java多線程(7.0)

目錄 ?編輯 定時器 定時器的使用 三.定時器的實現 MyTimer 3.1 分析思路 1. 創建執行任務的類。 2. 管理任務 3. 執行任務 3.2 線程安全問題 定時器 定時器是軟件開發中的一個重要組件. 類似于一個 "鬧鐘". 達到一個設定的時間之后, 就執行某個指定好的…

優化非線性復雜系統的參數

非線性項組合的系統 對于系統中的每一個復雜擬合&#xff0c;即每一個殘差函數&#xff0c;都能表示為非線性方程的趨勢&#xff0c;例如較為復雜的系統函數組&#xff0c; from optimtool.base import sp, np x sp.symbols("x1:5") res1 0.5*x[0] 0.2*x[1] 1.…

清華LeapLab開源Cooragent框架:一句話構建本地智能體服務群,讓AGI真正觸手可及

引言&#xff1a;智能體革命&#xff0c;從復雜到簡單 在人工智能發展的浪潮中&#xff0c;Agent&#xff08;智能體&#xff09; 技術被視為實現通用人工智能&#xff08;AGI&#xff09;的關鍵路徑。然而&#xff0c;傳統智能體的開發與協作始終面臨兩大痛點&#xff1a;依賴…

云原生--核心組件-容器篇-1-Docker和云原生關系(Docker是云原生的基石)

1、基本概念 &#xff08;1&#xff09;、云原生&#xff08;Cloud Native&#xff09; 是一種構建和運行應用程序的方法論&#xff0c;旨在充分利用云計算環境&#xff08;公有云、私有云、混合云&#xff09;的特性&#xff0c;通過容器化、微服務、服務網格、聲明式API等技…

問答頁面支持拖拽和復制粘貼文件,MaxKB企業級AI助手v1.10.6 LTS版本發布

2025年4月24日&#xff0c;MaxKB開源企業級AI助手正式發布v1.10.6 LTS版本。這一版本主要進行了一些功能優化和問題修復。 功能優化 ■ 應用&#xff1a;文件上傳支持上傳其他自定義的文件類型&#xff0c;該類型文件需要自行寫入函數解析&#xff1b; ■ 問答頁面&#xff…

用戶案例--慧眼科技

作者&#xff1a;算力魔方創始人/英特爾創新大使劉力 每個行業都有其獨特的需求&#xff0c;算力魔方推出了全面的定制化服務&#xff0c;從概念到產品化&#xff0c;滿足各行各業&#xff0c;用戶可以根據具體應用需求定制更多接口或更強圖形處理的需求&#xff0c;且算力魔方…

apple 個人開發者轉公司經驗

1、在apple開發者官網申請 2、收到郵件后&#xff0c;回復準備了開始遷移 3、收到填寫遷移資料的郵件 4、開始填寫資料 Sign In - Applehttps://developer.apple.com/enroll/type/edit To complete this change, you will need: 要完成此更改&#xff0c;您需要&#xff1a; L…

【ESP32-IDF筆記】20-配置以太網網絡(W5500)

環境配置 Visual Studio Code &#xff1a;版本1.98.2 ESP32&#xff1a;ESP32-S3 ESP-IDF&#xff1a;V5.4 模塊&#xff1a;W5500&#xff0c;SPI通訊協議 組件支持&#xff1a;esp_eth 官方的ethernet 以太網組件 W5500介紹 介紹 W5500 是一款全硬件 TCP/IP 嵌入式以太網…

衛星通信的基本概念

1 頻段 頻段 頻率范圍 技術特點 典型應用 優勢 局限性 最新進展 L 頻段 1-2 GHz 波長較長&#xff0c;穿透能力強&#xff0c;受天氣影響小&#xff0c;帶寬較窄&#xff08;<100 MHz&#xff09;。 衛星導航&#xff08;北斗 / GPS&#xff09;、海事通信&#x…

數據結構------C語言經典題目(7)

1.系統棧和數據結構中的棧有什么區別&#xff1f; 1.本質&#xff1a; 系統棧&#xff1a;由程序運行時由操作系統自動分配的一塊連續內存區域&#xff0c;用于存儲函數調用過程中的臨時數據&#xff08;參數、局部變量、返回地址&#xff09;&#xff0c;是程序運行的底層機制…

【Redis】一、redis的下載與安裝

目錄 一、redis下載 二、啟動服務 三、測試服務 四、可視化界面 五、設置reids密碼 今天起準備對redis進行學習&#xff0c;目標是掌握實際開發項目中如何應用redis等操作。首先在這里講將如何下載redis&#xff0c;方便以后查閱。 一、redis下載 可以去官網&#xff08…