今天的代码功能是:将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;
}
}
网友评论