JDBC批处理

Posted 牛穿疯

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JDBC批处理相关的知识,希望对你有一定的参考价值。

当需要向数据库发送一批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 }

 

以上是关于JDBC批处理的主要内容,如果未能解决你的问题,请参考以下文章

面试常用的代码片段

mysql jdbc源码分析片段 和 Tomcat's JDBC Pool

JDBC操作数据库之查询数据

如何在片段中填充列表视图?

处理屏幕旋转上的片段重复(带有示例代码)

在 Python 多处理进程中运行较慢的 OpenCV 代码片段