目录
目标
实验背景
原理
具体实现
目标
以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.得到表sheet1
Sheet 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);
}
}
}
}
}
|