public class MysqlBatchUpdateDao extends SqlMapDaoTemplate implements BatchUpdateDao{

public MysqlBatchUpdateDao(DaoManager daoManager) {
super(daoManager);
} public int BatchUpdateHuifang(List<OrderBean> list) {
int flag=0;
int i=0;

try {
this.startBatch();
for(OrderBean order : list){

this.update("OrderD.updateOrderDByList", order);
}
this.executeBatch();

flag = 1;
} catch (Exception e) {

e.printStackTrace();
}
return flag;
}
}
批量更新不起作用.为什么呢?都找一天了.更新是更新了.但是和不批量更新用的时间是一样的.

解决方案 »

  1.   

    还有 我的size没设置 是因为 我的list一共是20条.我想批量更新20条,但是批量更新的代码无效啊.
      

  2.   

    参考http://www.javaeye.com/topic/68962
      

  3.   

    看了 还是不管用啊..是不是我的上传页面有问题啊..大家帮我瞧瞧
    <html>
      <head>
    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">    
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="This is my page">
    <!--
    <link rel="stylesheet" type="text/css" href="styles.css">
    -->  </head>
      
      <body>
    <jsp:useBean id="su" scope="page" class="com.jspsmart.upload.SmartUpload"/>
    <%   
            String filePath ="";
            String error ="";
    SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
    sdf.setLenient(false);
        try{
        //System.out.println(new Date());   
            su.initialize(pageContext); 
         
            su.setAllowedFilesList("xls");
            su.setDeniedFilesList("exe,bat,jsp,htm,html,txt,dos,rar,zip,,bak");
        
            su.upload();
            //out.println("dfdf"); 
    SimpleDateFormat sf = new SimpleDateFormat("yyyyMMddHHmmss");
    String time = sf.format(new Date());

      filePath ="d:/upload/callCenter"+time+".xls";
           // System.out.println(su.getFiles().getFile(0).getFileName());
           // out.println("old   "+filePath);  
         //   BWXContext context  = new BWXContext();
            su.getFiles().getFile(0).saveAs(filePath);
            //out.println(context.getUserID());
            }catch(Exception e){
               error = "此文件不是EXCEL文件";
            %>
            <table><tr><td><font size=5 color="red"><%=error %></font></td></tr></table>
            
            <%
    return;
            }
          
    Cell cell = null;
          //  String sql = null;
            int flag = 0;
           
            try {                // 加载postgresql驱动
                   
                   
                    InputStream fs = null;
    try {
    fs = new FileInputStream(filePath);

    } catch (RuntimeException e) {

    e.printStackTrace();
    }

    List<OrderBean> uplist = new ArrayList();
                    Workbook wb  = Workbook.getWorkbook(fs);
                    Sheet sh = wb.getSheet(0);
                    for (int i = 1; i < sh.getRows(); i++) {
                      List list = new ArrayList();
                            for (int j = 0; j < sh.getColumns(); j++) {
                                    cell = sh.getCell(j, i);
                                    list.add( cell.getContents());
                            }
                            if(!"".equals(list.get(2))&&!"".equals(list.get(3))&&!"".equals(list.get(0))&&!"".equals(list.get(1))){
                             // sql = "UPDATE orderd t SET t.PrepNum1="+list.get(4)+",t.PrepChar1='!h"+list.get(8)+"!i"+list.get(9)+"!j"+list.get(10)+"!k"+list.get(11)+"!l"+list.get(5)+"',t.PrepChar2='"+list.get(6)+"',t.PrepChar3='"+list.get(7)+"' where t.dccode='"+list.get(2)+"' and t.consignorcode='"+list.get(3)+"' and t.ordercode='"+list.get(0)+"' and t.carserialnumber='"+list.get(1)+"' ";                                                                              
                             OrderBean orderBean = new OrderBean();
                            
                             orderBean.setPrepChar1("!h"+list.get(8)+"!i"+list.get(9)+"!j"+list.get(10)+"!k"+list.get(11)+"!l"+list.get(5));
                             orderBean.setPrepChar2(String.valueOf(list.get(6)));
                             orderBean.setPrepChar3(String.valueOf(list.get(7)));
                             orderBean.setPrepNum1(Double.valueOf(String.valueOf(list.get(4))));
                             orderBean.setDcCode(String.valueOf(list.get(2)));
                             orderBean.setConsignorCode(String.valueOf(list.get(3)));
                             orderBean.setOrdercode(String.valueOf(list.get(0)));
                             orderBean.setCarserialnumber(String.valueOf(list.get(1)));
                             uplist.add(orderBean);
                            }
                    }
                    DaoManager daoMgr = BWDBDaoConfig.getDaomanager();
                    BatchUpdateDao dao=(BatchUpdateDao)daoMgr.getDao(BatchUpdateDao.class);
                    flag=dao.BatchUpdateHuifang(uplist);
                    wb.close();
                    fs.close();
                   
            } catch (IOException ex) {
                    ex.printStackTrace();
            } catch (BiffException ex) {
                    ex.printStackTrace();
            }

    if("".equals(error) && flag==1){
    %>
    <table><tr><td><font size=5 color="red">导入成功!</font></td></tr></table>
    <%
        }else{
        
        %>
    <table><tr><td><font size=5 color="red">导入失败!<%=error %></font></td></tr></table>
    <%
        
        }
    %> 
      </body>
    </html>
      

  4.   

     this.executeBatch();
    问题查出来了
    执行提交的这一句要运行很长很长时间,不知道为什么??该怎么处理
      

  5.   

    befor:2009-12-22 15:31:07.642
    after:2009-12-22 15:34:58.971
    这是刚才
     this.executeBatch();
    的用时,更新1000条要4分钟.和不批量更新没什么差别哈...