在日常工作中,经常会使用到将数据库中的数据导出execl表,
提示:以下是本篇文章正文内容,下面案例可供参考
一、例子说明
需求:需要将数据库表中需要得数据放入指定execl得行列中,具体可看下图
myaql数据库表:
指定的execl:
最终结果:
二、问题分析
1.操作步骤
通过java语言逻辑去操作mysql数据库是需要通过JDBC(一种用于执行SQL语句的Java API)去完成,可以连接到数据库中,连接到数据库之后,将要执行sql查询语句作为一个参数,还需要创建一个实体类,在创建一个传入sql查询语句作为参数获取数据的类,返回一个集合,可供解析execl放入数据时候使用。
添加相关依赖以及jar
*JDBC需要用到的jar文件.将jar文件放入项目的lib目录中 mysql-connector-java-8.0.28-bin.jar,如果本地没有去官网下载即可。注意:一定要下载和你本地的mysql版本一致的jar包。下载以后进行解压,复制jar文件到lib目录下。mysql官网。
*给当前项目添加依赖(告诉当前项目/模块可以依赖jar文件中的代码) 右键ideaFile,选中Project Structure
点击OK
*添加解析Execl需要用到的opi依赖。
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.14</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.14</version>
</dependency>
2.代码演示
创建实体类:
package com.zfy.sqltoexecl;
import java.sql.Date;
/**
* @Auther: zfy
* @Date: 2022/10/24 - 10 - 24 - 20:18
* @Description: com.zfy.sqltoexecl
* @version: 1.0
*/
//这是一个实体类
public class ComUser {
//属性
private int com_id; //id
private String com_name;//填报公司
private Date com_date;//填报日期
private String com_linkman;//联系人
private long com_linkcall;//联系电话
//空参构造器
public ComUser() {
}
//有参构造器
public ComUser(int com_id, String com_name, Date com_date, String com_linkman, long com_linkcall) {
this.com_id = com_id;
this.com_name = com_name;
this.com_date = com_date;
this.com_linkman = com_linkman;
this.com_linkcall = com_linkcall;
}
//geter/seter方法
public int getCom_id() {
return com_id;
}
public void setCom_id(int com_id) {
this.com_id = com_id;
}
public String getCom_name() {
return com_name;
}
public void setCom_name(String com_name) {
this.com_name = com_name;
}
public Date getCom_date() {
return com_date;
}
public void setCom_date(Date com_date) {
this.com_date = com_date;
}
public String getCom_linkman() {
return com_linkman;
}
public void setCom_linkman(String com_linkman) {
this.com_linkman = com_linkman;
}
public long getCom_linkcall() {
return com_linkcall;
}
public void setCom_linkcall(long com_linkcall) {
this.com_linkcall = com_linkcall;
}
@Override
public String toString() {
return "ComUser{" +
"com_id=" + com_id +
", com_name='" + com_name + '\'' +
", com_date=" + com_date +
", com_linkman='" + com_linkman + '\'' +
", com_linkcall=" + com_linkcall +
'}';
}
}
连接数据库查询数据的类
package com.zfy.sqltoexecl;
import java.sql.*;
/**
* @Auther: zfy
* @Date: 2022/10/24 - 10 - 24 - 19:54
* @Description: com.zfy.sqltoexecl
* @version: 1.0
*/
//这是一个连接数据库的工具类
public class ConnectSql {
//这是一个连接数据库的方法 JDBC
Connection connection = null;
public void connect() {
String url = "jdbc:mysql://127.0.0.1:3305/work?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai";
String user = "****";//这里是mysql数据库账号
String password = "****"; //这里是mysql数据库的密码
//加载驱动
String driver = "com.mysql.cj.jdbc.Driver";
//加载驱动连接
try {
Class.forName(driver);
//获得数据库连接
connection = DriverManager.getConnection(url, user, password);
} catch (ClassNotFoundException e) {
e.printStackTrace();
System.out.println("数据库加载失败");
} catch (SQLException throwables) {
throwables.printStackTrace();
System.out.println("数据库连接失败");
}
}
// 这是一个查询的方法 返回一个结果集 传入sql语句 这里返回一个ResultSet类型对象,可供获取数据
PreparedStatement preparedStatement = null;
ResultSet resultSet = null;
public ResultSet select(String sql) {
connect();//方法之间的使用 在这里调用连接数据库的方法
try {
preparedStatement = connection.prepareStatement(sql);
resultSet = preparedStatement.executeQuery();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
return resultSet;
}
}
获取数据的类,将数据存放集合可供解析execl时候放入单元格使用
package com.zfy.sqltoexecl;
import java.sql.Date;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
/**
* @Auther: zfy
* @Date: 2022/10/25 - 10 - 25 - 9:53
* @Description: com.zfy.sqltoexecl
* @version: 1.0
*/
public class Getdata {
//查询数据库中com表中的所有数据 返回List集合
public List<ComUser> getComData(){
//将语句对象存入一个List集合返回
List<ComUser> listcom = new ArrayList<>();
//连接数据库
ConnectSql connectsql = new ConnectSql();
connectsql.connect();
//声明sql语句
String sql = "select * from com";
ResultSet select = connectsql.select(sql,null);
try {
while (select.next()){
int com_id = select.getInt("com_id");
String com_name = select.getString("com_name");
Date com_date = select.getDate("com_date");
String com_linkman = select.getString("com_linkman");
long com_linkcall = select.getLong("com_linkcall");
//将获取到的数据运用实体类,存放list集合当中
listcom.add(new ComUser(com_id,com_name,com_date,com_linkman,com_linkcall));
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return listcom;
}
}
解析execl类 将获取到的数据放入指定execl的单元格中
package com.zfy.sqltoexecl;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
/**
* @Auther: zfy
* @Date: 2022/10/25 - 10 - 25 - 15:35
* @Description: com.zfy.sqltoexecl
* @version: 1.0
*/
public class ToExecl {
//将获取到的数据放进execl
public static void main(String[] args) {
toExecl();
}
public static void toExecl(){
FileInputStream fileInputStream = null;
FileOutputStream fileOutputStream = null;
try {
//先读取execl
String execlpath ="E:\\bug buxiban\\baomi\\SqlToExecl.xlsx";
File file = new File(execlpath);
fileInputStream = new FileInputStream(file);
HSSFWorkbook sheets = new HSSFWorkbook(fileInputStream);
//获取第一张表单 getSheetAt(这里是execl表单的下标)
HSSFSheet sheet0 = sheets.getSheetAt(0);
List<ComUser> listcom = new Getdata().getComData();
for (int i = 0; i < listcom.size(); i++) {
//获取execl每一行 刚好行的个数等于集合中获取数据的长度
HSSFRow row = sheet0.getRow(i);
//每一行获取列对象,就可以根据循环设置单元格内容
//这里的单元格内容就是获取数据放在集合中的实体类对象,这个对象就可以调用实体类中的get方法 从而被成功设置。
row.getCell(2).setCellValue(listcom.get(i).getCom_name());
row.getCell(12).setCellValue(listcom.get(i).getCom_date());
row.getCell(17).setCellValue(listcom.get(i).getCom_linkman());
row.getCell(22).setCellValue(listcom.get(i).getCom_linkcall());
}
//写出一个新的execl
fileOutputStream = new FileOutputStream(new File("E:\\bug buxiban\\baomi\\SqlToExecl1.xlsx"));
sheets.write(fileOutputStream);
fileOutputStream.flush();
} catch (IOException e) {
e.printStackTrace();
}finally {
//关闭流 从下到上关闭
if (fileOutputStream!=null){
try {
fileOutputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (fileInputStream!=null){
try {
fileInputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
本文含有隐藏内容,请 开通VIP 后查看