有下面两种情况:
1:
PreparedStatement pst=conn.prepareStatement(sql);
for(Object o:vt){
  pst.setObject(1,o);
  ...
  pst.executeUpdate();
  ...  
}
2.
for(Object o:vt){
  PreparedStatement pst=conn.prepareStatement(sql);
  pst.setObject(1,o);
  ...
  pst.executeUpdate();
  ...  
  pst.close;
}相对于数据库而言,那种性能更好?为什么

解决方案 »

  1.   

    用addBatch然后executeBatch可能更好
      

  2.   

    不是讨论批处理的问题,那我改成 
    pst.executeUpdate();吧我想问下,第二种方法,数据库会解析几次:一次还是N次
      

  3.   

    第二种要快点,不需要重复的创建PreparedStatement 对象,当然楼主问这个问题,很搞,你自己弄个几万条数据main函数跑一下试试不就知道了嘛。当然最快的还是用batch,1000条一提交
      

  4.   


    有些问题即使知道结果 分析代码还是很有必要的数据库方面我不觉得会有什么差别 但是在JVM中,第二种方法会定义pst很多次 所以效果应该会差一点
      

  5.   

    两种写法只要sql文本是一样的(即使多个空格也不行),数据库的执行环境一样,在数据库里表现形式是一样的,都会使用同一个共享游标
    (还有要注意的是oracle引擎有绑定变量的分级,他根据绑定变量长短可以将绑定变量分为四个级别,所以一条相同的sql因为绑定标量分级的不同也会进行硬解析,而不会使用共享游标,这个其实也算是执行环境不同)另外,就java而言第一种写法是标准规范的
      

  6.   

    connection.setAutoCommit(false);
    PreparedStatement ps = connection.prepareStatement(sql);
    for(Object o:vt){
        ps.setObject(1,o);
        ps.addBatch();
    }int[] updateCounts = ps.executeBatch();conneciton.commit();
    connection.setAutoCommit(true);
      

  7.   

    第一种要好一些,第二种不停地申请空间,用完之后又得利用java的自动回收来释放空间,必然会影响性能的。第一种只申请一次,然后重写sql语句,节省了申请和释放空间的时间,自然要好一些了。个人之见。。