JDBC批处理

亡梦爱人 提交于 2020-03-21 08:04:52

当需要向数据库发送一批SQL语句执行时,应避免向数据库一条条的发送执行,而应采用JDBC的批处理机制,以提升执行效率。

1、第一种方式


 1 package com.demo;
 2 
 3 import java.sql.Connection;
 4 import java.sql.PreparedStatement;
 5 import java.sql.ResultSet;
 6 import java.sql.SQLException;
 7 import java.sql.Statement;
 8 
 9 import org.junit.Test;
10 
11 import com.utils.DButils;
12 
13 //jdbc批处理
14 public class Demo3 {
15     //批处理第一种方式
16     @Test
17     public void test1() throws SQLException{
18         Connection con = null;
19         Statement st = null;
20         ResultSet result = null;
21         
22         try{
23             con = DButils.getConnection();
24             String sql1 = "insert into testbatch(id,name) values('1','aaaa')";
25             String sql2 = "update testbatch set name='bbbb' where id=1";
26             st = con.createStatement();
27             st.addBatch(sql1);//Statement维护了一个list集合
28             st.addBatch(sql2);
29             
30             //返回一个int[1,1]数组代表每条sql语句影响几行数组
31             st.executeBatch();
32             st.clearBatch();
33             
34         }finally{
35             DButils.release(con, st, result);
36         }
37     }

 

 

 

2、第二种方式

 1 //实现批处理的第二种方式  适用于批量更新和插入
 2     @Test
 3     public void test2() throws SQLException{
 4         Connection con = null;
 5         PreparedStatement st = null;
 6         ResultSet result = null;
 7         long startTime = System.currentTimeMillis();
 8         try{
 9             con = DButils.getConnection();
10             String sql = "insert into testbatch(id,name) values(?,?)";
11             st = con.prepareStatement(sql);
12             for(int i=1;i<10000;i++){
13                 st.setString(1,i+"");
14                 st.setString(2,"aa"+i);
15                 st.addBatch();
16             }
17             st.executeBatch();
18             st.clearBatch();    
19             
20         }finally{
21             DButils.release(con, st, result);
22         }
23         long endTime = System.currentTimeMillis();
24         System.out.println("花费时间:"+(endTime-startTime)/1000+"秒");
25     }
26 }

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!