package java5.blob; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.SQLException; import org.junit.Test; import java3.util.JDBCUtils; /* * 使用PreparedStatement实现批量数据的操作 * update、delete本身就具有批量操作的效果 * 所以主要研究如何用PreparedStatement实现更高效的批量插入 */ public class InsertTest { //批量插入方式二:使用PreparedStatement @Test public void testInsert1() throws Exception{ Connection conn=null; PreparedStatement ps=null; try { long start = System.currentTimeMillis(); conn = JDBCUtils.getConnedtion(); String sql=insert into goods(name)values(?); ps = conn.prepareStatement(sql); for(int i=1;i<=200;i++){ ps.setObject(1, name_+i); ps.execute(); } long end = System.currentTimeMillis(); System.out.println(花费的时间为:+(end-start)); } catch (Exception e) { e.printStackTrace(); } finally{ JDBCUtils.closeResource(conn, ps); } } /* * 批量插入的方式三: * 1、addBatch()、executeBatch()、clearBatch() * 2、mysql服务器默认关闭批处理,需要配置参数,让mysql开启批处理的支持 * ?rewriteBatchedStatements=true 写在配置文件的url后面 * */ @Test public void testInsert2() throws Exception{ Connection conn=null; PreparedStatement ps=null; try { long start = System.currentTimeMillis(); conn = JDBCUtils.getConnedtion(); String sql=insert into goods(name)values(?); ps = conn.prepareStatement(sql); for(int i=1;i<=20000;i++){ ps.setObject(1, name_+i); //1.赞sql ps.addBatch(); if(i%500==0){ //2.执行batch ps.executeBatch(); //3.清空batch ps.clearBatch(); } } long end = System.currentTimeMillis(); System.out.println(花费的时间为:+(end-start)); } catch (Exception e) { e.printStackTrace(); } finally{ JDBCUtils.closeResource(conn, ps); } } //批量插入的方式四:设置连接不允许自动提交数据 @Test public void testInsert3() throws Exception{ Connection conn=null; PreparedStatement ps=null; try { long start = System.currentTimeMillis(); conn = JDBCUtils.getConnedtion(); conn.setAutoCommit(false); String sql=insert into goods(name)values(?); ps = conn.prepareStatement(sql); for(int i=1;i<=20000;i++){ ps.setObject(1, name_+i); //1.赞sql ps.addBatch(); if(i%500==0){ //2.执行batch ps.executeBatch(); //3.清空batch ps.clearBatch(); } } //提交数据 conn.commit(); long end = System.currentTimeMillis(); System.out.println(花费的时间为:+(end-start)); } catch (Exception e) { e.printStackTrace(); } finally{ JDBCUtils.closeResource(conn, ps); } } }