日期:2014-05-18  浏览次数:20714 次

请教以下代码问题!急啊~~~~
public   boolean   insertCab(List   list,int   num){
boolean   bRet=false;
Connection   conn   =new   DBConnection().getConnection();
try{
Statement   stmt   =conn.createStatement();
for(int   i=0;i <num;i++){
Keycab   cab=(Keycab)list.get(i);
String   sql= "insert   into   kms_cabinfo   values( "+cab.getCabid()+ ", "+cab.getMaxofkey()+ ", ' "
+cab.getCabstate()+ " ', ' "+cab.getBstate()+ " ', ' "+cab.getSstate()+ " ', "+cab.getRows()+ ", "
+cab.getCols()+ ") ";
stmt.addBatch(sql);
stmt.executeBatch();
conn.commit();
}  
                        bRet   =   true;
}catch(Exception   ex){
  try   {
conn.rollback();
                        }   catch   (Exception   ex2)   {
                                System.err.println( "rollback   failed: "   +   ex2.getMessage());
                        }
}finally   {
                }
                return   bRet;
}

问题是,如果list只有一个对象,此时num=1.这样可以正确写入数据库,而当list含有多个对象的时候,方法只能写入最后一条,而且返回bRet为false,不知道为什么,弄了两天了,还是没有搞定啊,急!!

------解决方案--------------------
在for循环里面把i打印出来,还是怀疑你的循环条件有问题。另外stmt.executeBatch();也的确应该写在循环外面。
------解决方案--------------------
Statement stmt =conn.createStatement();
你把这句放在sql语句的下面试试,因为可能是每做一次循环要声明一个新的statement对象,要是同一个的话commit()了多少次都是一条对象的吧?
------解决方案--------------------
解决了没有,
问题出在哪,我也很想知道.