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向数据库中插入大量数据时的优化的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql中having的例子_mysq
- 下一篇: 永久免费内网穿透很简单,一看就明白(长文