目录
目标
实验背景
原理
具体实现
目标
以Java程序为中介,将Excel表中的信息储存到Mysql数据库中
实验背景
先需要将一张包含学生和老师信息的Excel表中的数据存储到Mysql数据库中
原理
先通过相关jar包的类从Excel表中读取到信息,接着对这些信息进行封装,调用dao层的相关方法存储到数据库中即可
具体实现
要实现该功能我们需要引入一些jar包,这些jar包中封装有操作Excel表的相关类
在导入了jar包后,我们通过有关类先读取信息;先将每行的信息存入map中,之后运用JavaBean的populate方法对对象信息进行封装,最后调用持久层(dao层)方法存储有关对象信息。
import damain.User;
import org.apache.commons.beanutils.BeanUtils;
import org.apache.poi.hssf.usermodel.HSSFDateUtil;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.*;
import org.joda.time.DateTime;
import service.UserService;
import service.impl.UserServiceImpl;import java.io.*;
import java.lang.reflect.InvocationTargetException;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;public class test {public static void main(String[] args) throws Exception {ReadExcel("D:\\桌面\\测试.xls");}public static void ReadExcel(String path) throws Exception {UserService service=new UserServiceImpl();File file = new File(path);// 获取文件流FileInputStream inputStream = new FileInputStream(file);// 1.创建一个工作簿, excel 能操作的它都能操作/** 注意:xls的要用HSSFWorkbook,xlsx要用XSSFWorkbook* 二者区别在于前者是小容量,数据量超过60000↑+便会报错;后置没有该限制,适用于处理数据量大的情况*/Workbook workbook = new HSSFWorkbook(inputStream);// 2.得到表sheet1Sheet sheet = workbook.getSheetAt(0);// 获取物理最大行(即excel表当前所加载的行数,并不是指我们数据写到的哪行)int rowCount = sheet.getPhysicalNumberOfRows();// 获取标题行Row rowTitle = sheet.getRow(0);//读取行for (int rowNum = 1; rowNum < rowCount; rowNum++) {Row rowData = sheet.getRow(rowNum);//封装数据Map<String,String> map=new HashMap();//创建对应对象User user=new User();//该行的数据if (rowData != null && rowData.getCell(0)!=null) {//注意要加上rowData.getCell(0)!=null;不然会出现读空数据情况// 读取列int cellCount = rowTitle.getPhysicalNumberOfCells();for (int cellNum = 0; cellNum < cellCount; cellNum++) {//System.out.print("[" + (rowNum + 1) + "-" + (cellNum + 1) + "]");String cellValue = "";Cell cell = rowData.getCell(cellNum);// 匹配数据的类型if (cell != null) {CellType cellType = cell.getCellType();//int cellType = cell.getCellType();//选择列的对应数据类型switch (cellType) {case STRING: // 字符串//System.out.print("[String]");cellValue = cell.getStringCellValue();break;case NUMERIC: //数字// System.out.print("[numeric]");if (HSSFDateUtil.isCellDateFormatted(cell)) { //日期// System.out.print("[日期]");Date date = cell.getDateCellValue();cellValue = new DateTime(date).toString();} else {// 不是日期格式,防止数字过长// System.out.print("[转换为字符串输出]");cell.setCellType(CellType.STRING);cellValue = cell.toString();}break;default:System.out.print("[数据类型错误!]");break;}}map.put(rowTitle.getCell(cellNum).getStringCellValue(),cellValue);}try {BeanUtils.populate(user, map);System.out.println("user = " + user);} catch (IllegalAccessException e) {e.printStackTrace();} catch (InvocationTargetException e) {e.printStackTrace();}if(user.getIdentity().equals("学生")){Boolean aBoolean = service.registerStudent(user);System.out.println(aBoolean);}if(user.getIdentity().equals("导师")){Boolean aBoolean = service.registerTutor(user);System.out.println(aBoolean);}}}}
}