使用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;
	}
	@Override
	public 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;
	}
	
}

导入数据:

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

分享结束啦!!!!! 

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值