注意事项:
1、因为jdbc默认事务提交是一条一提交,那么我们批处理的时候首先要设置事务的提交方式为手动提交(原因:你插入20000条数据默认要提交20000次?我们设置手动一次提交即可)
2、批处理应该使用statement
3、一定要执行批处理
1 package edu.test; 2 3 import java.sql.Connection; 4 import java.sql.DriverManager; 5 import java.sql.PreparedStatement; 6 import java.sql.ResultSet; 7 import java.sql.SQLException; 8 import java.sql.Statement; 9 /** 10 * @author lzj 11 * @create 2017年11月14日 下午7:54:34 12 * @describe 13 */ 14 public class TestJdbc { 15 16 /** 17 * at 2017年11月14日 下午7:54:34 by lzj 18 * @Parameters1 19 * @Returns void 20 */ 21 public static void main(String[] args) { 22 Connection conn = null; 23 Statement stmt=null; 24 try { 25 //mysql -hlocalhost -uroot -plzj_aeon+ 26 Class.forName("com.mysql.jdbc.Driver"); 27 long start=System.currentTimeMillis(); 28 //此处数据库建立远程连接(内部采用socket建立远程连接)比较耗时、一般开发中我们采用连接池方式、此处只是为了简单的一个示例 29 conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/student", "root", "lzj_aeon+"); 30 long end=System.currentTimeMillis(); 31 System.out.println(conn); 32 System.out.println("数据库建立连接耗时:"+(end-start)+"毫秒!"); 33 conn.setAutoCommit(false);//设置次数事务提交方式为手动提交 34 stmt=conn.createStatement(); 35 int i=0; 36 for(i=0;i<200;i++) { 37 stmt.addBatch("insert into student(id,name) values ("+(i+1)+",'lzj"+(i+1)+"')"); 38 i+=1; 39 } 40 stmt.executeBatch();//执行批处理...此处一定要执行批处理! 41 conn.commit();//手动提交 42 long end1=System.currentTimeMillis(); 43 System.out.println("批量插入"+i+"条数据耗时(毫秒):"+(end1-end)); 44 } catch (ClassNotFoundException e) { 45 e.printStackTrace(); 46 } catch (SQLException e) { 47 e.printStackTrace(); 48 }finally{ 49 try { 50 if(stmt!=null) { 51 stmt.close(); 52 } 53 } catch (Exception e2) { 54 System.out.println("stmt流关闭异常!"); 55 e2.printStackTrace(); 56 } 57 try { 58 if(conn!=null) { conn.close();} 59 } catch (SQLException e3) { 60 System.out.println("conn流关闭异常!"); 61 e3.printStackTrace(); 62 } 63 64 65 } 66 67 } 68 69 }
运行结果截图:
数据库截图: