失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 使用poi技术将MySQL数据库的数据导入导出到excel文件

使用poi技术将MySQL数据库的数据导入导出到excel文件

时间:2020-11-17 15:35:17

相关推荐

使用poi技术将MySQL数据库的数据导入导出到excel文件

前言:

1、使用poi技术将数据库中t_student的数据读取并导出到excel中

2、创建一个新的excel文件,并添加数据通过poi方式读取excel数据文件并写入到数据库表t_student中;

一、在MySQL创建表

首先在MySQL创建学生表(t_student):

表的字段为:编号sid,姓名sname,年龄sage,性别ssex;

如图所示(表设计):编号为主键自增

二、导入jar包

导入我们需要的六个jar包:

如图所示:

三、连接MySQL数据库

连接数据的DBHelper类:

源代码如下:

package com.zking.util;import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.ResultSet;public class DBHelper {//MySQL数据库驱动private static final String driver = "com.mysql.cj.jdbc.Driver";//数据库连接地址 sys:数据库库名private static final String url = "jdbc:mysql://localhost:3306/sys?useUnicode=true&characterEncoding=UTF-8";/*** 注册驱动类*/static {try {Class.forName(driver);} catch (Exception e) {e.printStackTrace();}}/*** 连接数据库* root 数据库用户名* 1234 数据库密码* @return*/public static Connection getCon() {Connection con=null;try {con=DriverManager.getConnection(url, "root", "1234");} catch (Exception e) {e.printStackTrace();}return con;}/*** 关闭连接* @param con Connection对象* @param ps PreparedStatement对象* @param rs ResultSet对象*/public static void CloseDB(Connection con,PreparedStatement ps,ResultSet rs) {try {if(con!=null) {con.close();}if(ps!=null) {ps.close();}if(rs!=null) {rs.close();}} catch (Exception e) {e.printStackTrace();}}/*** 测试* @param args*/public static void main(String[] args) {System.out.println(DBHelper.getCon());}}

测试代码如下图则表示连接成功:

四、实体类与dao方法

entity实体类(Student):

package com.zking.entity;public class Student {private Integer sid;private String sname;private int sage;private String ssex;public Student() {super();}public Student(String sname, int sage, String ssex) {super();this.sname = sname;this.sage = sage;this.ssex = ssex;}public Student(int sid, String sname, int sage, String ssex) {super();this.sid = sid;this.sname = sname;this.sage = sage;this.ssex = ssex;}public int getSid() {return sid;}public void setSid(int sid) {this.sid = sid;}public String getSname() {return sname;}public void setSname(String sname) {this.sname = sname;}public int getSage() {return sage;}public void setSage(int sage) {this.sage = sage;}public String getSsex() {return ssex;}public void setSsex(String ssex) {this.ssex = ssex;}@Overridepublic String toString() {return "Student [sid=" + sid + ", sname=" + sname + ", sage=" + sage + ", ssex=" + ssex + "]";}}

dao方法(StudentDao)分别有添加方法和查询所有的方法:

package com.zking.dao;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.util.ArrayList;import com.zking.entity.Student;import com.zking.util.DBHelper;public class StudentDao {/*** 添加对象* @param stu 要添加的学生对象* @return 成功返回1,失败返回0*/public int addStu(Student stu) {int i=0;Connection con=null;PreparedStatement ps=null;try {con=DBHelper.getCon();ps=con.prepareStatement("insert into t_student(sname,sage,ssex) values (?,?,?)");ps.setString(1, stu.getSname());ps.setInt(2, stu.getSage());ps.setString(3, stu.getSsex());i=ps.executeUpdate();} catch (Exception e) {e.printStackTrace();}finally {DBHelper.CloseDB(con, ps, null);}return i;}/*** 查询所有* @return 返回ArrayList集合,失败返回null*/public ArrayList<Student> getByAll() {ArrayList<Student> slist=new ArrayList<>();Connection con=null;PreparedStatement ps=null;ResultSet rs=null;try {con=DBHelper.getCon();ps=con.prepareStatement("select * from t_student");rs=ps.executeQuery();while(rs.next()) {Student stu=new Student(rs.getInt(1), rs.getString(2), rs.getInt(3), rs.getString(4));slist.add(stu);}} catch (Exception e) {e.printStackTrace();}finally {DBHelper.CloseDB(con, ps, rs);}return slist;}}

五、导出excel文件的工具类代码

原代码如下:

package com.zking.test;import java.io.FileOutputStream;import java.util.List;import org.apache.poi.ss.usermodel.Cell;import org.apache.poi.ss.usermodel.CellStyle;import org.apache.poi.ss.usermodel.Font;import org.apache.poi.ss.usermodel.Row;import org.apache.poi.ss.usermodel.Sheet;import org.apache.poi.ss.usermodel.Workbook;import org.apache.poi.xssf.streaming.SXSSFWorkbook;import com.zking.dao.StudentDao;import com.zking.entity.Student;/*** 数据库数据导出到xls表格* @author zjjt**/public class Export {public static void main(String[] args) {//实例化dao对象StudentDao stu=new StudentDao();//用集合接收查询到的对象List<Student> list=stu.getByAll();//定义表头-第一行String[] titles= {"编号","姓名","年龄","性别"};//声明一个工作谱,设置长度为100行Workbook wb=new SXSSFWorkbook(100);//创建sheet页Sheet sheet = wb.createSheet();//从0开始定义每一行Row row=sheet.createRow(0);sheet.setColumnWidth(0, 30*256);//设置当前sheet页第一列宽度//给单元格设置样式CellStyle cellstyle=wb.createCellStyle();Font font= wb.createFont();//设置字体大小font.setFontHeightInPoints((short)10);////设置字体加粗font.setBold(true);////给字体设置样式//cellstyle.setFont(font);////设置单元格背景颜色//cellstyle.setFillBackgroundColor(IndexedColors.GREY_25_PERCENT.getIndex());////设置单元格填充样式//cellstyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);//for循环设置了表头,也就是名称,性别,年龄for (int i = 0; i < titles.length; i++) {//取到每一行的值由i控制Cell cell= row.createCell(i);cell.setCellValue(titles[i]);cell.setCellStyle(cellstyle);//设置列的宽度sheet.setColumnWidth(i, 100*50);}//遍历数据集合for (int j = 0; j < list.size(); j++) {//for循环是从0开始的,但是0行在第一个for循环已经设置好了Row rowDate=sheet.createRow(j+1);//找到每一行的下标Student stus=list.get(j);//从第0行第一列开始赋值Cell cell=rowDate.createCell(0);cell.setCellValue(stus.getSid());//第二列Cell cell2=rowDate.createCell(1);cell2.setCellValue(stus.getSname());//第三列Cell cell3=rowDate.createCell(2);cell3.setCellValue(stus.getSage());//第四列Cell cell4=rowDate.createCell(3);cell4.setCellValue(stus.getSsex());}//输出数据的集合System.out.println("数据:"+list);//定义导出文件的路径String file="C:\\Users\\zjjt\\Desktop/导出.xls";try {//输出流FileOutputStream fileoutputstream=new FileOutputStream(file);//写出wb.write(fileoutputstream);//关闭wb.close();System.out.println("导出成功!!");} catch (Exception e) {//抛出异常e.printStackTrace();}}}

输出结果显示为:

六、导入到MySQL数据的工具类代码

源代码如下:

package com.zking.test;import java.io.File;import java.io.FileInputStream;import java.util.ArrayList;import java.util.List;import org.apache.poi.hssf.usermodel.HSSFRow;import org.apache.poi.hssf.usermodel.HSSFSheet;import org.apache.poi.hssf.usermodel.HSSFWorkbook;import com.zking.dao.StudentDao;import com.zking.entity.Student;/*** 把exel导入到数据库* @author zjjt**/public class Import {public static void main (String[] args) {//创建Excel文件//String [] title= {"编号","姓名","年龄","性别"};File file=new File("C:\\Users\\zjjt\\Desktop/Student.xls");////判断文件是否存在//if(file == null) {//System.out.println("文件不存在!!!");//}try {//文件转换成文件流形式FileInputStream fis = new FileInputStream(file);//获取exel操作示例HSSFWorkbook hwb = new HSSFWorkbook(fis);//根据页面index获取sheet页HSSFSheet sheet=hwb.getSheetAt(0);//封装成exel表格中获取集合方法List<Student> slist = getStudentListByExel(sheet);System.out.println("数据:"+slist);//实例化dao类StudentDao sd=new StudentDao();//遍历集合添加进数据库for (int i = 0; i < slist.size(); i++) {//找到集合的每一个下标Student stu=slist.get(i);//调用添加方法sd.addStu(stu);}System.out.println("添加数据库成功");} catch (Exception e) {//抛出异常e.printStackTrace();}}//封装public static List<Student> getStudentListByExel(HSSFSheet sheet){//实体类集合List<Student> slist=new ArrayList<>();HSSFRow row=null;//获取每一行的数据for (int i = 1; i <sheet.getPhysicalNumberOfRows() ; i++) {//获取每一行的数据row=sheet.getRow(i);Student stu=new Student();//把第一列转化为String类型stu.setSname(row.getCell(0).getStringCellValue());//把第二列转化为int类型stu.setSage(Integer.valueOf((int)row.getCell(1).getNumericCellValue()));//把第三列转化为String类型stu.setSsex(row.getCell(2).getStringCellValue());slist.add(stu);}return slist;}}

导入数据:

导入运行数据库结果显示(包含测试):

分享结束啦!!!!!

如果觉得《使用poi技术将MySQL数据库的数据导入导出到excel文件》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。