读取文件写入数据库表

前提文件字段需要和数据库表的字段对应 并且数据库表的字段要和实体类的属性一一对应

public int couponDt() throws IOException {
        SqlSessionFactory sqlSessionFactory = (SqlSessionFactory) ApplicationContextHelper.getBean("testSqlSessionFactory");
        SqlSession session = sqlSessionFactory.openSession(false);
        BufferedReader in = null;
        FileInputStream fdr = null;
        InputStreamReader is = null;
        Map<String, Object> map = new HashMap<String,Object>();
        long starttime = System.currentTimeMillis();
        try {
            String path = "文件的路径";
            File upFile = new File(path);
            if(!upFile.exists()){
                logger.error("文件不存在!");
                throw new IOException("文件不存在");
            }
            fdr = new FileInputStream(upFile);
            is = new InputStreamReader(fdr,"GBK"); //注意装载的时候需要用GBK
            in = new BufferedReader(is, 30 * 1024 * 1024);//50M缓存
            String line = "";
            String everyLine = "";
            int count = 0;
            List<User> userls = new ArrayList();
            while ((line = in.readLine()) != null) {
                count++;
                everyLine = line;
                if (everyLine.contains("||")) {
                    everyLine = everyLine.replace("|| ", "||")+"|| ||&";
                }else{
                    continue;
                }
                //根据文件格式来,这里分隔符是|| 所以需要转义
                String users[] = everyLine.split("\\|\\|");
                User user= new User ();
                Field[] fields= User.class.getDeclaredFields();
                int i = 0;
                for(Field field : fields ) {
                    String objName = field.getName();
                    Field f = user.getClass().getDeclaredField(objName);
                    f.setAccessible(true);
                    if("java.math.BigDecimal".equals(f.getAnnotatedType().getType().getTypeName())){
                        f.set(user,getBigDec(users[i].trim()));
                    }else {
                        f.set(user,users[i].trim());
                    }
                    i++;
                    if(i==44)break;// 文件仅44个字段,
                }
                //从文件路径中取商户号
                userls.add(user);
                if(count%1000==0){
                    map.put("list",userls);
                    session.insert("***.insertAll",map);
                    userls.clear();
                    map.clear();
                }
            }
            if(userls.size()>0){
                map.put("list",userls);
                session.insert("***.insertAll",map);
            }
            session.commit();
            logger.info(upFile.getName()+"装载["+count+"]条数据,耗时:"+(System.currentTimeMillis()-starttime));
        }catch (Exception e){
            logger.info("装载出错",e);
        }finally {
            if(in!=null){
                in.close();
            }
            if (fdr!=null){
                fdr.close();
            }
            if (is!=null){
                is.close();
            }
            if (null!=session)
                session.close();
        }
        return 0;
    }
    public BigDecimal getBigDec(String strBigDec) throws Exception {
        BigDecimal bide = new BigDecimal("0.00");
        if(!"".equals(strBigDec)){
            try{
                bide = new BigDecimal(strBigDec);
            }catch (Exception e){
                logger.error(strBigDec+"转换BigDecimal错误:",e);
                throw new Exception("装载时:"+strBigDec+"转换BigDecimal异常,抛出运行时异常");
            }
        }else{
            bide = null;
        }
        return bide;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值