首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > 其他数据库 >

JDBC批量安插测试

2012-12-24 
JDBC批量插入测试2009-05-21 使用JDBC插入大量数据的性能测试关键字: 性能测试使用jdbc向数据库插入100000

JDBC批量插入测试

2009-05-21 使用JDBC插入大量数据的性能测试  关键字: 性能测试   使用jdbc向数据库插入100000条记录,分别使用statement,PreparedStatement,及PreparedStatement+批处理3种方式进行测试:   //1.使用statement插入100000条记录       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) {      // TODO Auto-generated catch block      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) {      // TODO Auto-generated catch block      e.printStackTrace();     }    }   //3.使用PreparedStatement + 批处理   public void exec3(Connection conn){     try {      conn.setAutoCommit(false);      Long beginTime = System.currentTimeMillis();      PreparedStatement pst = conn.prepareStatement("insert into t1(id) values (?)");            for(int i=1;i<=100000;i++){           pst.setInt(1, i);       pst.addBatch();       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) {      // TODO Auto-generated catch block      e.printStackTrace();     }    }   在Oracle 10g中测试,结果:   1.使用statement耗时142秒;   2.使用PreparedStatement耗时56秒;   3.使用PreparedStatement + 批处理耗时:   a.50条插入一次,耗时5秒;   b.100条插入一次,耗时2秒;   c.1000条以上插入一次,耗时1秒;   通过以上可以得出结论,在使用jdbc大批量插入数据时,明显使用第三种方式(PreparedStatement + 批处理)性能更优。
?

热点排行