为什么我用prepareStatement执行批量插入总是只能插入一条数据?
db   =   new   Database(dbURL,   false);          
             conn   =   db.getConn();          
             pstmt   =   conn.prepareStatement(preSql);                                 
             conn.setAutoCommit(false);          
             for   (int   j   =   0;   j    <   commitCount;   ++j)   {          
                         try   {          
                                     pstmt.clearBatch();          
                                     pstmt.clearParameters();          
                                     String[]   tmp   =   ((String[])setConf.elementAt(j));          
                                     for   (int   i   =   1;   i    <=   tmp.length;   ++i)   {          
                                                 pstmt.setString(i,   tmp[i   -   1]);          
                                     }          
                                     pstmt.addBatch();          
                         }   catch   (
SQLException   e)   {          
                                     Loger.log.error( "some   operation   about   pstmt   throw   SQLException!\n "   +   e);          
                                     continue;          
                         }          
             }          
             tmpRets   =   pstmt.executeBatch();          
             conn.commit();         
 我用上面的代码执行批量的插入,只执行一次executeBatch操作,但每次只能插入第一条数据,所以更通的办法是在for里面执行这个操作,这样就是一条数据就提交一次了,效率肯定低。但我不知道为什么会这样。我看网上很多类似代码也是这样的逻辑的啊。   
 另外,如果我不需要事务,我能否不要setAutoCommit,这样好像又不是一次提交是吗?而是每次都提交吗? 
------解决方案--------------------为什么要调用clearBatch()?   
 JDK DOC对这个方法的描述: 
 Empties this Statement object 's current list of SQL commands.  
 从这句话来看,岂不是整个SQL命令的列表都被清空了?   
 另外如果没有必要clearParameters()也无需调用。 
 DOC的说法是: 
 However, in some cases it is useful to immediately release the resources used by the current parameter values   
 除非你有必要即时释放当前参数占用的资源,否则没必要调用该方法。