每天写1000字

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

2019-02-16  本文已影响38人  3171631ce5f1

今天的代码功能是:将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;
    }
}
上一篇下一篇

猜你喜欢

热点阅读