测试了一下java导入mysql的2种批量方法,不知道还能不能更快

午吃好任务 发布于 2015/03/04 18:32
阅读 236
收藏 1

收藏!数据建模最全知识体系解读!>>>

测试之前以为方法一更快,可结果PreparedStatement更快,不知道是不是还有欠缺的地方

方法一:运行时间为21977ms

int i=1;
  long startTime=System.currentTimeMillis();
  String param="nihao,77";
  Connection conn=ConnTool.makeConnection();
  Statement st=conn.createStatement();
  conn.setAutoCommit(false);
  while(i<=100000){
   System.out.println(i);
   String[] tmp=new String[2];
   tmp=param.split("\\,");
   String sql="insert into yao values("+i+",'"+tmp[0]+"','"+tmp[1]+"')";
   st.addBatch(sql);
   if(i%1000==0){
    st.executeBatch();
    conn.commit();
   }
   i++;
  }
  long endTime=System.currentTimeMillis();
  System.out.println("time is:"+(endTime-startTime)+"ms");
  conn.close();

方法二:运行时间为:19559ms

int i=1;
  long startTime=System.currentTimeMillis();
  String param="nihao,77";
  Connection conn=ConnTool.makeConnection();
  PreparedStatement pst=conn.prepareStatement("insert into yao values(?,?,?)");
  conn.setAutoCommit(false);
  while(i<=100000){
   System.out.println(i);
   String[] tmp=new String[2];
   tmp=param.split("\\,");
   pst.setInt(1, i);
   pst.setString(2, tmp[0]);
   pst.setString(3, tmp[1]);
   pst.addBatch();
   if(i%1000==0){
    pst.executeBatch();
    conn.commit();
   }
   i++;
  }
  long endTime=System.currentTimeMillis();
  System.out.println("time is:"+(endTime-startTime)+"ms");
  conn.close();

 

加载中
0
双_双
双_双

字符串拼接,不考虑安全问题么?

0
南湖船老大
南湖船老大

PreparedStatement 理论上是应该快的,因为预编译过程还包含了一个缓存在里面。

这个你最好再调整一下JDBC的参数。多试几遍

0
返回顶部
顶部