码迷,mamicode.com
首页 > 数据库 > 详细

jdbc的批量插入

时间:2019-04-11 10:29:29      阅读:147      评论:0      收藏:0      [点我收藏+]

标签:==   行修改   shm   cti   ret   close   err   jpa   next   

    public  static String genData(Connection dbConn,BASEVC BASEVC,String tableName,String RPDT,RPRJRTJ_PL JRTJPar,String sql){
         JrtjComm JRTJComm=new JrtjComm();
        String rtcd="0000";
        String BKNO = CommonUtil.null2empty(BASEVC.getBKNO());
        //String TSDT = CommonUtil.null2empty(BASEVC.getTSDT());
        ResultSet rs = null;
        Statement stmt = null;
        PreparedStatement pstmt  =null;
        long startTime = System.currentTimeMillis(); //获取开始时间 测试用,生产可注释
        List<Map> dataList=new ArrayList <Map>();
        try {


            logger.info(tableName+":"+sql);
            stmt=dbConn.createStatement();
            rs = stmt.executeQuery(sql.toString());
            long endTime = System.currentTimeMillis(); //获取结束时间  测试用,生产可注释
            System.out.println("程序运行时间:" + (endTime - startTime) + "ms"); //输出程序运行时间  测试用,生产可注释
            long startTime1 = System.currentTimeMillis(); // 获取开始时间 测试用,生产可注释

            // 将查询到的数据插入到表中
            StringBuffer insert = new StringBuffer();
            insert.append("  insert into ").append(tableName);
            insert.append("  (BKNO,CJRQ,ZHH,ZHMC,KHNBBM,KHHJRJGBM,KHHNBJGH,ZHBZ,ZHLX,KHRQ,XHRQ,ZHZT,SFKTWSYH,SFKTSJYH,ACST,STAT,SBTY) values ");
            insert.append( " (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)");
            pstmt  =dbConn.prepareStatement(insert.toString());
            while (rs.next() ) {
                String    ZHH    = CommonUtil.null2empty(rs.getString("ZHH"));
                String    ZHMC    = CommonUtil.null2empty(rs.getString("ZHMC"));
                String    KHNBBM    = CommonUtil.null2empty(rs.getString("KHNBBM"));
                String    KHHJRJGBM    = CommonUtil.null2empty(rs.getString("KHHJRJGBM"));
                String    KHHNBJGH    = CommonUtil.null2empty(rs.getString("KHHNBJGH"));
                String    ZHBZ    = CommonUtil.null2empty(rs.getString("ZHBZ"));
                String    ACTY    = CommonUtil.null2empty(rs.getString("ACTY"));
                String    ZHLX    = CommonUtil.null2empty(rs.getString("ZHLX"));
                if("7".equals(ZHLX)){//个人结算户
                    ZHLX="0"+ACTY;
                }else if("1".equals(ZHLX)){//个人储蓄账户
                    ZHLX="04";
                }else if("2".equals(ZHLX)){//基本存款账户
                    ZHLX="06";
                }else if("3".equals(ZHLX)||"0".equals(ZHLX)||"6".equals(ZHLX)||"8".equals(ZHLX)||"9".equals(ZHLX)||"A".equals(ZHLX)){//一般存款账户
                    ZHLX="07";
                }else if("D".equals(ZHLX) ||"5".equals(ZHLX)){//专用存款账户
                    ZHLX="08";
                }else if("4".equals(ZHLX) || "B".equals(ZHLX) ||"C".equals(ZHLX)){//临时存款账户
                    ZHLX="09";
                }
                String        KHRQ    = CommonUtil.null2empty(rs.getString("KHRQ"));
                String        XHRQ    = CommonUtil.null2empty(rs.getString("XHRQ"));
                String        ACST    = CommonUtil.null2empty(rs.getString("ACST")); //原账户状态

                //String        FEAM    = CommonUtil.null2empty(rs.getString("FEAM"));
                //1正常、2休眠、3合同限制、4司法限制状态
                String    ZHZT="1";
                if("1".equals(ACST.substring(0,1))) {
                    ZHZT="3";//销户,等于合同限制
                }else if("1".equals(ACST.substring(4,5))){
                     ZHZT="2";//休眠
                } else if (ACST.length()==9 ){
                     if (ACST.endsWith("2") || ACST.endsWith("1")) {
                         ZHZT="3";//合同限制
                     }
                   } else  {
                       CA CA=new CA();//借用
                       rtcd=zhTai(dbConn,ZHH,RPDT,BKNO,CA);
                       if(!"0000".equals(rtcd)){
                           return rtcd;
                       }
                       String AA=CA.getACCT();
                       if("1".equals(AA)){//金额冻结或状态冻结
                           ZHZT="4";
                       }
                }


                  String  ISNEW= CommonUtil.null2empty(rs.getString("ISNEW"));//**是不是修改的  **/
                     if(!ISNEW.equals("")){//如果空就是增加的,否则是新修改的,对修改的以前的信息上报类型进行修改
                         String  ZHZTY= CommonUtil.null2empty(rs.getString("ZHZTY"));
                         if(ZHZTY.equals(ZHZT)){
                             continue;
                         }
                     }

                String    SFKTWSYH    = CommonUtil.null2empty(rs.getString("SFKTWSYH"));
                String    SFKTSJYH    = CommonUtil.null2empty(rs.getString("SFKTSJYH"));


                // pstmt = dbConn.prepareStatement(insert.toString());
                 int fnum = 1;
                 pstmt.setString(fnum++,BKNO);
                 pstmt.setString(fnum++,RPDT);
                 pstmt.setString(fnum++,ZHH);
                 pstmt.setString(fnum++,ZHMC);
                 pstmt.setString(fnum++,KHNBBM);
                 pstmt.setString(fnum++,KHHJRJGBM);
                 pstmt.setString(fnum++,KHHNBJGH);
                 pstmt.setString(fnum++,ZHBZ);
                 pstmt.setString(fnum++,ZHLX);
                 pstmt.setString(fnum++,KHRQ);
                 pstmt.setString(fnum++,XHRQ);
                 pstmt.setString(fnum++,ZHZT);
                 pstmt.setString(fnum++,SFKTWSYH);
                 pstmt.setString(fnum++,SFKTSJYH);
                 pstmt.setString(fnum++,ACST);
                 pstmt.setString(fnum++, "0");
                 pstmt.setString(fnum++, "1");
                // pstmt.executeUpdate();
                // pstmt.close();
                pstmt.addBatch();


                 if(!ISNEW.equals("")){//如果空就是增加的,否则是新修改的,对修改的以前的信息上报类型进行修改
                     StringBuffer updateSQL = new StringBuffer();
                        updateSQL.append(" UPDATE ").append(tableName).append(" SET SBTY=2 ");
                        updateSQL.append(" WHERE BKNO=‘").append(BKNO).append("‘");
                        updateSQL.append(" and ZHH=‘").append(ZHH).append("‘");
                        updateSQL.append(" and CJRQ IN(");
                        updateSQL.append(" SELECT * FROM ( SELECT MAX(CJRQ) FROM ").append(tableName);
                        updateSQL.append(" WHERE BKNO=‘").append(BKNO).append("‘");
                        updateSQL.append(" and ZHH=‘").append(ZHH).append("‘");
                        updateSQL.append(" and STAT=1 ) A");
                        updateSQL.append(" )");


                    rtcd = JrtjComm.updateSBTY(dbConn, updateSQL.toString());
                        if(!rtcd.equals("0000")){
                            return rtcd;
                        }
                 }
                 Map <String ,String>dataMap=new<String ,String> HashMap();
                 dataMap.put("BKNO",BKNO);/****/
                 dataMap.put("CJRQ",RPDT);/****/
                 dataMap.put("ZHH",ZHH);
                 dataMap.put("ZHMC",ZHMC);
                 dataMap.put("KHNBBM",KHNBBM);
                 dataMap.put("KHHJRJGBM",KHHJRJGBM);
                 dataMap.put("KHHNBJGH",KHHNBJGH);
                 dataMap.put("ZHBZ",ZHBZ);
                 dataMap.put("ZHLX",ZHLX);
                 dataMap.put("KHRQ",KHRQ);
                 dataMap.put("XHRQ",XHRQ);
                 dataMap.put("ZHZT",ZHZT);
                 dataMap.put("SFKTWSYH",SFKTWSYH);
                 dataMap.put("SFKTSJYH",SFKTSJYH);
                  dataList.add(dataMap);
            }
            pstmt.executeBatch();
            long endTime1 = System.currentTimeMillis(); // 获取结束时间 测试用,生产可注释
            System.out.println("插入JR_ZHXX表程序运行时间:" + (endTime1 - startTime1) + "ms"); // 输出程序运行时间 测试用,生产可注释
            pstmt.close();
            rtcd=JRTJComm.GenFile(dbConn, tableName, BASEVC, RPDT,JRTJPar,dataList);


        }
        catch (Exception e) {
            rtcd="出现异常,交易失败。";
            logger.error("出现异常:",e);
        }finally{
            try{

                if (null != stmt)
                      stmt.close();
                if (null != rs)
                    rs.close();
                if (null != pstmt)
                    pstmt.close();

            }catch(Exception e){
            }

        }
        return rtcd;
    }

测试比对不使用批量的时间,使用后是20秒以内,多数是17秒左右,没用批量是3分钟以上,数据是7000多条。
注意:rewriteBatchedStatements=true 这个加到你的数据库配置的URL后面。

本人菜鸡一个,欢迎大佬们来吐槽和指导。

 

jdbc的批量插入

标签:==   行修改   shm   cti   ret   close   err   jpa   next   

原文地址:https://www.cnblogs.com/ccppjy/p/10687955.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!