一、首先编写查询方法与添加方法,用于操作数据(Mysql数据库)
1、查询方法
public ArrayList<Student> IOPout() {
ArrayList<Student> list=new ArrayList<>();
Connection con=null;
PreparedStatement ps=null;
ResultSet rs=null;
try {
con= DBHelper.getCon();
ps=con.prepareStatement("select * from student");
rs=ps.executeQuery();
while (rs.next()){
Student s=new Student();
s.setSid(rs.getInt(1));
s.setSname(rs.getString(2));
s.setSsex(rs.getString(3));
s.setSage(rs.getInt(4));
s.setSaddr(rs.getString(5));
list.add(s);
}
} catch (Exception e) {
e.printStackTrace();
}
return list;
}
2、添加方法
public int add(Student s){
int i=0;
Connection con=null;
PreparedStatement ps=null;
try {
con= DBHelper.getCon();
ps=con.prepareStatement("insert into student values (?,?,?,?,?)");
ps.setDouble(1,s.getSid());
ps.setString(2,s.getSname());
ps.setString(3,s.getSsex());
ps.setDouble(4,s.getSage());
ps.setString(5,s.getSaddr());
i=ps.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
}
return i;
}
二、然后导入poi的工具包(本文章自备,请自行下载)
数据导出
一、在下方编写main方法,然后实例化此类,再指定XLXS文件的路径
creExcl c=new creExcl();
// 设置Excel文件路径
File file = new File("D:/student.xlsx");
二、调用查询方法,实例化创建文件的类和创建工作表的类,并为工作表设置表名(在poi工具包中)
//调用查询方法
ArrayList<Student> list= c.IOPout();
// 创建文件并指定文件路径
XSSFWorkbook workbook = new XSSFWorkbook();
// 创建工作表并设置表名
XSSFSheet sheet = workbook.createSheet("学生信息");
三、开始创建行,从下标为0的开始,然后设置表头内容
// 创建行,下标从0开始
XSSFRow row = sheet.createRow(0);
// 在行中创建列并赋值,下标从0开始/
row.createCell(0).setCellValue("编号");
row.createCell(1).setCellValue("姓名");
row.createCell(2).setCellValue("性别");
row.createCell(3).setCellValue("年龄");
row.createCell(4).setCellValue("住址");
四、开始从查询到的数据集合中循环取值
注:下标为0的行为表头,创建行数要+1
//循环赋值
for (int os=0;os<=list.size()-1;os++) {
//创建一行
row = sheet.createRow(os+1);
//每一行的每一列加入对应的数据
row.createCell(0).setCellValue(list.get(os).getSid());
row.createCell(1).setCellValue(list.get(os).getSname());
row.createCell(2).setCellValue(list.get(os).getSsex());
row.createCell(3).setCellValue(list.get(os).getSage());
row.createCell(4).setCellValue(list.get(os).getSaddr());
}
五、用try-catch包裹,并创建输出流,指向文件所在路径,然后将输出流中的数据写入工作表中,最后关闭输出流
try {
FileOutputStream stream = new FileOutputStream(file);
// 将数据导出到Excel表格
workbook.write(stream);
// 关闭输出流
stream.close();
} catch (Exception e) {
throw new RuntimeException(e);
}
数据导入
一、创建输入流,创建工作簿,获取工作表,从下标0开始
// 创建改文件的输入流
FileInputStream stream = new FileInputStream(file);
// 创建工作簿
Workbook workbook = new XSSFWorkbook(stream);
// 获取一个工作表,下标从0开始
Sheet sheet = workbook.getSheetAt(0);
二、利用for循环,逐行取出工作表中的数据,并转换数据类型,实例化数据对象,设置对象的属性值,最后调用添加方法,关闭输入流
for(int i=1;i<=sheet.getLastRowNum();i++){
// 获取行
Row row = sheet.getRow(i);
// 获取行中列的数据
String[] value = new String[5];
// 获取每一列的数据
Cell cell = row.getCell(1);
// 判断数据是否为null
if (cell != null) {
// 转换数据类型
cell.setCellType(Cell.CELL_TYPE_STRING);
}
Cell cell1 = row.getCell(2);
if (cell1 != null) {
cell1.setCellType(Cell.CELL_TYPE_STRING);
}
Cell cell2 = row.getCell(4);
if (cell2 != null) {
cell2.setCellType(Cell.CELL_TYPE_STRING);
}
// 初始化学生对象
Student s=new Student();
// 为学生对象设置默认值
s.setSid((int)row.getCell(0).getNumericCellValue());
s.setSname(cell.getStringCellValue());
s.setSsex(cell1.getStringCellValue());
s.setSage((int)row.getCell(3).getNumericCellValue());
s.setSaddr(cell2.getStringCellValue());
// 调用添加方法,导入数据
int p= c.add(s);
}