JDBC批量處理數(shù)據(jù)之分段批量提交以及異常處理

首先來說批量處理數(shù)據(jù)的優(yōu)點:

代碼優(yōu)化,提高程序執(zhí)行性能

降低了java程序代碼(客戶端)和數(shù)據(jù)庫之間的 網(wǎng)絡(luò)通信的次數(shù)。


大數(shù)據(jù)量的插入問題:(jdbc,hibernate,ibatis)

1.每次只插入一條和數(shù)據(jù)庫交互多次(很耗時間)

2.批量插入和數(shù)據(jù)庫只交互一次(內(nèi)存溢出)


解決辦法:分段批量插入(推薦)

?jdbc批量處理數(shù)據(jù)是通過PreparedStatement對象的 addbatch(), executebatch() clearbatch()進(jìn)行和數(shù)據(jù)庫的交互。通常我們使用分段批量處理的方式 這樣可以提高程序的性能 ,防止內(nèi)存溢出。

1.每個sql語句都和數(shù)據(jù)庫交互一次(非批量操作)

2.只和數(shù)據(jù)庫交互一次(批量操作)(內(nèi)存溢出)

當(dāng)數(shù)據(jù)達(dá)到一定額度的時候就和數(shù)據(jù)庫進(jìn)行交互,分多次進(jìn)行(分段批量操作)(500或者1000)

pst.addBatch();

if (i > 0 && i%1000 == 0) {

pst.executeBatch();

pst.clearBatch();

}

JDBC分段批量提交的時候出現(xiàn)異常怎么處理:

解決方案:

通過Map來解決性能問題。首先在分段批量提交的時候,我們不采用事務(wù),這樣就保證了合法的數(shù)據(jù)就自動提交,不合法的數(shù)據(jù)就自己自動進(jìn)行回滾,為了避免不合法數(shù)據(jù)影響后續(xù)合法數(shù)據(jù)的提交,采用定義業(yè)務(wù)規(guī)則字典表,實現(xiàn)對數(shù)據(jù)的驗證,將不合法的數(shù)據(jù)記錄下來,供用戶進(jìn)行后續(xù)處理,而合法的數(shù)據(jù)就全部提交。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容