美文网首页每天写1000字
2019-02-16 第59天(我教你POI5-Excel导入数

2019-02-16 第59天(我教你POI5-Excel导入数

作者: 3171631ce5f1 | 来源:发表于2019-02-16 22:33 被阅读38次

    今天的代码功能是:将Excel文件中的数据,导入到Mysql数据库中。
    JSP页面

    <form action="<%=path %>/export.do" method="post" enctype="multipart/form-data"> 
        <input type="file" name="file" >
        <input type="submit" value="导入">
    </form>
    
    /**
     * excel文件数据导入mysql数据库
     * 不会将导入的文件,进行保存
     * 与excelDY.jsp页面配合,实现excel文件的导入,并读取数据
     * @author Administrator
     */
    @Controller     
    public class ExcelDY {
        @Resource 
        private UserDao userDao;
        
        @RequestMapping(value="export", method = RequestMethod.POST)    
        public void export(@RequestParam(value = "file") MultipartFile file,HttpServletRequest request, HttpServletResponse response) {
            System.out.println("进来了");
            try {
                // @RequestParam(value = "file") MultipartFile file 是用来接收前端传递过来的文件
                // 参数value = "file",需要与上传域的name值一致,否则会报异常400,参数不存在
                
                InputStream inputStream = file.getInputStream();  //创建输入流对象
                POIFSFileSystem poifsFileSystem = new POIFSFileSystem(inputStream);//解析excel文件
                
                HSSFWorkbook wb = new HSSFWorkbook(poifsFileSystem);// 1.创建workbook对象,读取整个文档            
                HSSFSheet sheetAt = wb.getSheetAt(0);//2.读取sheet
    
                List<Student> cellList = new ArrayList<Student>();
                Student student = null;
                //循环单sheet表中所有行         getLastRowNum获取最后一行的行号
                for (int rowIndex = 1; rowIndex <=sheetAt.getLastRowNum() ; rowIndex++) {
                    Row row =sheetAt.getRow(rowIndex);  //读取行
                    student = new Student();
                    //根据文件头可以控制从哪一行读取,在下面if中进行控制
                    if (row == null) {
                        continue;
                    }
                    //遍历每一行的每一列,知道循环行内所有单元格 getLastCellNum获取当前行最后一列的列号              
                    for (int cellIndex = 0; cellIndex < row.getLastCellNum(); cellIndex++) {                                        
                        Cell cell = row.getCell(cellIndex);  //获取单元格中的数据
                        System.out.println("遍历行中cell数据:"+getCellValue(cell));  //这行代码可忽略
                         if (cellIndex  == 0) {
                                student.setStunum(cell.getStringCellValue());//电话
                                continue;
                         }
                         if (cellIndex  == 1) {
                                student.setStuname(cell.getStringCellValue());//名字
                                continue;
                         }
                         if (cellIndex  == 2) {
                                student.setStuage(cell.getStringCellValue());//年龄
                                continue;
                         }
                         if (cellIndex  == 3) {
                                student.setStusex(cell.getStringCellValue());//性别
                                continue;
                         }
                         if (cellIndex  == 4) {
                                student.setStubirthday(cell.getStringCellValue());//生日
                                continue;
                         }
                         if (cellIndex  == 5) {
                                student.setStuhobby(cell.getStringCellValue());//爱好
                                continue;
                         }  
                    }
                    cellList.add(student);          
                }
                //保存数据库
                List<String> repeatCourseNums = null;  //这个集合的作用是,返回数据插入数据库时,哪些被cheak住了(如因重复数据,不同意插入);现在不用
                try {
                        repeatCourseNums = this.addCourseBaseInfoBatch(cellList);
                } catch (SQLException e) {
                    System.out.println("保存数据库的时候出错");
                }
    
                inputStream.close();
                
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        
        /**
         * 数据写入数据库
         * @param courseBaseInfos
         * @return
         * @throws SQLException
         */
        public List<String> addCourseBaseInfoBatch(List<Student> stu) throws SQLException {
             //1.遍历集合进行添加。
            //1.1如果已经存在相同的课程编号,将该课程的编号加到返回的集合中,用于提示哪些编号重复了
            List<String> repeatCourseNums = new ArrayList<String>();
            for(Student student :stu){
                userDao.insertStudent(student);
            }
            return null;
        }
    }
    

    相关文章

      网友评论

        本文标题:2019-02-16 第59天(我教你POI5-Excel导入数

        本文链接:https://www.haomeiwen.com/subject/weobeqtx.html