日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

java数据库的优化_用Java向数据库中插入大量数据时的优化

發布時間:2023/12/15 java 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java数据库的优化_用Java向数据库中插入大量数据时的优化 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

使用jdbc向數據庫插入100000條記錄,分別使用statement,PreparedStatement,及PreparedStatement+批處理3種方式進行測試:

public?void?exec(Connection?conn){

try?{

//開始時間

Long?beginTime?=?System.currentTimeMillis();

//設置手動提交

conn.setAutoCommit(false);

Statement?st?=?conn.createStatement();

for(int?i=0;i<100000;i++){

String?sql="insert?into?t1(id)?values?("+i+")";

st.executeUpdate(sql);

}

//結束時間

Long?endTime?=?System.currentTimeMillis();

System.out.println("st:"+(endTime-beginTime)/1000+"秒");//計算時間

st.close();

conn.close();

}?catch?(SQLException?e)?{

e.printStackTrace();

}

}

//2.使用PreparedStatement對象

public?void?exec2(Connection?conn){

try?{

Long?beginTime?=?System.currentTimeMillis();

conn.setAutoCommit(false);//手動提交

PreparedStatement?pst?=?conn.prepareStatement("insert?into?t1(id)?values?(?)");

for(int?i=0;i<100000;i++){

pst.setInt(1,?i);

pst.execute();

}

conn.commit();

Long?endTime?=?System.currentTimeMillis();

System.out.println("pst:"+(endTime-beginTime)/1000+"秒");//計算時間

pst.close();

conn.close();

}?catch?(SQLException?e)?{

e.printStackTrace();

}

}

//3.使用PreparedStatement + 批處理

public?void?exec3(Connection?conn){

try?{

conn.setAutoCommit(false);

Long?beginTime?=?System.currentTimeMillis();

//構造預處理statement

PreparedStatement?pst?=?conn.prepareStatement("insert?into?t1(id)?values?(?)");

//1萬次循環

for(int?i=1;i<=100000;i++){

pst.setInt(1,?i);

pst.addBatch();

//每1000次提交一次

if(i%1000==0){//可以設置不同的大小;如50,100,500,1000等等

pst.executeBatch();

conn.commit();

pst.clearBatch();

}

}

Long?endTime?=?System.currentTimeMillis();

System.out.println("pst+batch:"+(endTime-beginTime)/1000+"秒");

pst.close();

conn.close();

}?catch?(SQLException?e)?{

e.printStackTrace();

}

}

在Oracle 10g中測試,結果:

1.使用statement ?耗時142秒;

2.使用PreparedStatement 耗時56秒;

3.使用PreparedStatement + 批處理耗時:

a.50條插入一次,耗時5秒;

b.100條插入一次,耗時2秒;

c.1000條以上插入一次,耗時1秒;

通過以上可以得出結論,在使用jdbc大批量插入數據時,明顯使用第三種方式(PreparedStatement + 批處理)性能更優。

-------------------------------------------------------------------------------------------------------------------------------

普通方式處理大量數據的insert時,處理速度相當慢。

*/

PreparedStatement?ps?=?null;

//循環10000次

for(int?i?=?0;?i?

ps?=?con.prepareStatement(sql);

ps.executeUpdate();

}

方法二:通過addBatch()的方式,將數據緩存在對象里面,通過最后執行executeBatch();方法提交,因此速度會快很多!

*/

PreparedStatement?ps?=?con.prepareStatement(sql);

for(int?i?=?0;?i?

ps.setString(1,?"1");

ps.setString(2,?"2");

ps.addBatch();

}

ps.executeBatch();

總結

以上是生活随笔為你收集整理的java数据库的优化_用Java向数据库中插入大量数据时的优化的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。