zoukankan      html  css  js  c++  java
  • excel表里的数据导入到数据库里

    采用的是jxl,所以需要导jxl-2.4.2.jar的jar包.(前提知道excel表的目录):

     

       //用log记录异常信息

        private static final Logger log = LoggerFactory.getLogger(NwcfgdmService.class);

       //采用spring注解方式调用dao层的查询方法  

        @Autowired  
        private CirCuitBoInf cirCuitBo;

    public void excelToDb(){
        Workbook rwb=null;
        FileWriter fw = null;
        try {

          //默认的excel路径为D://opt/BOCO/name.xls
          InputStream is=new FileInputStream(new File("D:"+File.separator+"opt"+File.separator+"BOCO"+File.separator+"name.xls"));//读取文件
          rwb=Workbook.getWorkbook(is);
          Sheet rs=rwb.getSheet(0);
          try {

            //同是将数据库插入出现的异常记录在error.text文件上
            fw = new FileWriter("D:"+File.separator+"opt"+File.separator+"BOCO"+File.separator+"error.text",true);
            // 第二个参数 true 表示写入方式是追加方式
          } catch (Exception e) {
            e.printStackTrace();
            log.error("书写异常日志信息失败",e);
          }
          int rsRows=rs.getRows();
          // System.out.println(rsRows);
          int rsClos=rs.getColumns();
          // System.out.println(rsClos+"----");
          // 因为excel的第一行一般都是实体类的属性。所以从i从1开始取,这样就直接能读取数据了
          for(int i=1;i<rsRows;i++){
            for(int j =0;j<rsClos;j++){
            //默认最左边编号也算一列,所以这里是j++

            //时间的格式默认是yyyy/MM/dd,格式可自定义
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
            String id=rs.getCell(j++, i).getContents()+"";
            String name=rs.getCell(j++, i).getContents()+"";

            String end_date = rs.getCell(j++, i).getContents();

              Date end_dates = new Date();
            if(! end_date.equals("")){
            try{
              end_dates = sdf.parse(end_time);
            }catch(ParseException e){
              e.printStackTrace();
              log.error("名字为"+name+"的使用期限的格式不对,格式应该为'yyyy/MM/dd'",e);
              fw.write("名字为"+name+"的使用期限的格式不对,格式应该为'yyyy/MM/dd'"+" ");
            }  
           }
            // 接下来就是把从excel读取到的内容逐个set到Person对象中。然后将对象添加到集合。
            Person c =new Person();
            c.setId(id);
            c.setName(name);
            c.setEnd_date(end_dates);
            try {
              cirCuitBo.addCirCuit(c);
            } catch (UncategorizedSQLException e) {
            e.printStackTrace();
              log.error(c.getName()+"这条数据的某个字段长度超出了数据库定义的最大长度",e);
              fw.write(c.getName()+"这条数据的某个字段长度超出了数据库定义的最大长度"+" ");
              // System.out.println("错误信息:"+e+"---------");
            }catch(DataIntegrityViolationException e){
              e.printStackTrace();
              log.error(c.getName()+"这条数据的时间格式不对",e);
              fw.write(c.getName()+"这条数据的时间格式不对"+" ");
            }catch(Exception e){
              e.printStackTrace();
              log.error(c.getName()+"这条数据插入失败",e);
            }
        }
      }
    }
        }catch (FileNotFoundException e) {
          e.printStackTrace();
          log.error("该目录下不存在该文件",e);
        }catch(Exception e){
          e.printStackTrace();
          log.error("读取文件失败,请重新操作",e);
        }finally{
          rwb.close();
        try{
          fw.close();
        }catch (IOException e){
        e.printStackTrace();

        log.error("操作失败",e);
    }
    }
    }

  • 相关阅读:
    [LeetCode] Contains Duplicate 包含重复值
    [LeetCode] 281. The Skyline Problem 天际线问题
    Qt resizeEvent 控件居中设置
    [LeetCode] 214. Shortest Palindrome 最短回文串
    Qt Creator Shortcuts 快捷键大全
    Qt SizePolicy 属性
    [LeetCode] 30. Substring with Concatenation of All Words 串联所有单词的子串
    [LeetCode] 213. House Robber II 打家劫舍之二
    [LeetCode] 212. Word Search II 词语搜索之二
    [LeetCode] 18. 4Sum 四数之和
  • 原文地址:https://www.cnblogs.com/tianmengwei/p/4980764.html
Copyright © 2011-2022 走看看