一、需求

我们会遇到开发任务:

经理:小王,你来做一下把数据库里的数据导出到Excel中,一个表是一个sheet,不要一个表一个Excel.

小王:好的,经理.(内心一脸懵逼)

二、前期准备

首先我们采用Apache的POI来实现Excel的导出功能,

导入直通车---> 使用POI+hutool实现导入Excel

我们把maven依赖先准备好:

	<!-- 导出为Excel所需依赖 -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.9</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.9</version>
</dependency>
<!-- 工具包 -->
<dependency>
<groupId>commons-dbutils</groupId>
<artifactId>commons-dbutils</artifactId>
<version>1.6</version>
</dependency>

三、代码演示

  • 首先我们先使用JDBC结合Dbutils把要导出的数据库表数据准备好
    /**
* 利用jdbc来把要导出的数据表查询出来
* @return
*/
public static Map<String,List<Map<String, Object>>> getDataSource(){ Connection con = null;
Statement sta = null;
try {
//1.注册驱动==》告诉指挥部有哪些造桥人可以调遣
Class.forName("com.mysql.cj.jdbc.Driver"); //这里是mysql为例 oracle的url ---"jdbc:oracle:thin:@localhost:1521:orcl"
String url = "jdbc:mysql://127.0.0.1:3306/test";
String user = "root";
String pwd = "root"; //2.获得链接==》指挥部根据传入类型 调遣不同的造桥的人造桥
con = DriverManager.getConnection(url,user,pwd);
//3.创建Statement对象===》造车
sta = con.createStatement();
//4.执行SQL ==》运行SQL 有结果返回
String sql = "select * from user";
String sql1 = "select * from test"; //第五步处理结果还可以引入Dbutils工具包来解析结果
QueryRunner queryRunner = new QueryRunner(); //存放查询出来的数据,key为表名,value为查询出来的表字段和对应的值
Map<String,List<Map<String, Object>>> mapMap = new HashMap<>(); List<Map<String, Object>> query = queryRunner.query(con, sql, new MapListHandler()); List<Map<String, Object>> query1 = queryRunner.query(con, sql1, new MapListHandler()); //暂时以两张表为例,多张一个意思
mapMap.put("user",query);
mapMap.put("test",query1); return mapMap; } catch (ClassNotFoundException | SQLException e) {
e.printStackTrace();
return null;
}finally {
//6.关闭资源
DbUtils.closeQuietly(sta);//Dbutils封装了关闭方法
DbUtils.closeQuietly(con);
}
}
  • 接下来我们把这些数据库表数据导出到Excel
    /**
* 把准备好的数据库表数据导出到本地Excel中
*/
public boolean exportExcel() { //拿到数据库表的所有信息,开始导出
Map<String, List<Map<String, Object>>> source = getDataSource(); //创建一个Excel模板
Workbook workbook = new XSSFWorkbook(); for (Map.Entry<String,List<Map<String, Object>>> mapTop :source.entrySet()) {
//获取sheet的名字 以表名来命名
String sheetName = mapTop.getKey();
//创建sheet
Sheet sheet = workbook.createSheet(sheetName);
//创建第一行
Row header = sheet.createRow(0);
//从第二行开始 --来控制插入的行数
int rowSize = 1;
//便利每个表的数据
for (Map<String, Object> button : mapTop.getValue()){
//控制第一行的列
int columnSize = 0;
//给第一行表头赋值
for (String string :button.keySet()){
//把表头添加上
header.createCell(columnSize++).setCellValue(string);
}
//控制从第二行开始插入数据的列
int valueSize = 0; //创建第二行 每添加完一行+1
Row data = sheet.createRow(rowSize++); //从第二行开始都是数据
for (Object object : button.values() ){
//防止有的列为空
if (object != null) {
data.createCell(valueSize++).setCellValue(object.toString());
}else {
data.createCell(valueSize++).setCellValue("");
}
}
}
}
try {
File file = new File("E:/template/数据库表数据.xlsx");
if (file.exists()){
file.delete();//存在就删除
}
//保存到本地
FileOutputStream fos = new FileOutputStream("E:/template/数据库表数据.xlsx");
workbook.write(fos);
fos.close();
//存在就代表成功
return file.exists();
} catch (Exception e) {
e.printStackTrace();
return false;
}
}

四、结果截图

五、总结

这样就实现了数据库表的导出,有什么疑问留言哦,谢谢大家的观看!!!

使用POI把查询到的数据表数据导出到Excel中,一个表一个sheet.最详细!!!的更多相关文章

  1. 表结构导出到excel中

    SELECT 表名 = case when a.colorder=1 then d.name else '' end, 表说明 = case when a.colorder=1 then isnull ...

  2. 把数据库里面的stu表中的数据,导出到excel中

    # 2.写代码实现,把我的数据库里面的stu表中的数据,导出到excel中 #编号 名字 性别 # 需求分析:# 1.连接好数据库,写好SQL,查到数据 [[1,'name1','男'],[1,'na ...

  3. 将datagrid中数据导出到excel中 -------<<工作日志2014-6-6>>

    前台datagrid数据绑定 #region 导出到excel中    /// <summary>    /// 2014-6-6    /// </summary>    / ...

  4. 如何将存储在MongoDB数据库中的数据导出到Excel中?

    将MongoDB数据库中的数据导出到Excel中,只需以下几个步骤: (1)首先,打开MongoDB安装目录下的bin文件夹,(C:\Program Files (x86)\MongoDB\Serve ...

  5. 数据可视化之powerBI基础(十一)Power BI中的数据如何导出到Excel中?

    https://zhuanlan.zhihu.com/p/64415543 把Excel中数据加载到PowerBI中我们都已经熟悉了,但是怎么把在PowerBI中处理好的数据导出到Excel中呢?毕竟 ...

  6. Excel中的表单控件和active控件

    EXCEL中有两种控件:表单控件和active控件 表单控件是excel5和excel95开始使用的,从excel97开始,active控件开始出现 关于表单控件和active控件的区别和使用范围,网 ...

  7. 将Datagridview中的数据导出至Excel中

        首先添加一个模块ImportToExcel,并添加引用         然后导入命名空间: Imports Microsoft.Office.Interop Imports System.Da ...

  8. 在这个应用中,我使用了 MQ 来处理异步流程、Redis 缓存热点数据、MySQL 持久化数据,还有就是在系统中调用另外一个业务系统的接口,对我的应用来说这些都是属于 RPC 调用,而 MQ、MySQL 持久化的数据也会存在于一个分布式文件系统中,他们之间的调用也是需要用 RPC 来完成数据交互的。

    在这个应用中,我使用了 MQ 来处理异步流程.Redis 缓存热点数据.MySQL 持久化数据,还有就是在系统中调用另外一个业务系统的接口,对我的应用来说这些都是属于 RPC 调用,而 MQ.MySQ ...

  9. python3查询Excel中A表在B表没有的数据,并保存到新的Excel,这里用的是“xlrd”和“xlwt”

    import xlrd import xlwt # 打开A表,将A表的数据存放到cols1中,这里打印出来是方便查看测试数据. data1 = xlrd.open_workbook(r'F:\cars ...

随机推荐

  1. Springboot:单元测试日志打印@Slf4j 注解的使用方法

    当自己写日志的时候,肯定需要: private final Logger logger = LoggerFactory.getLogger(LoggerTest.class); 每次写新的类,就需要重 ...

  2. 小程序之app.json not found

    起因 最近在部署几款小程序时,发现ext.json文件会被忽略不上传,查了一下资料发现原来是需要升级开发者工具了. 没想到升级以后,再开发项目时,就报错 app.json not found 解决方法 ...

  3. [小技巧] google map使用

    在网页中打开 google map 中,可以使用 shift + - 来缩小地图,shift + + 来放大地图.

  4. leetcode 字符串转换整数 (模拟)

    思路分析 1.跟着题意模拟,分成几种情况来看待 2.一种全是空格 3.有可能有空格,然后有符号的 4.有可能有空格,无符号数字 5.有可能有空格,非数字开头 6.最后还需要考虑一个越界的问题,所以要除 ...

  5. 建立第一个SCRAPY的具体过程

    1.安装SCRAPY2.进入CMD:执行:SCRAPY显示: Scrapy 1.8.0 - no active project Usage: scrapy <command> [optio ...

  6. Java基础00-反射35

    1. 类加载器 深入理解java类加载器类加载器 1.1 类加载 类加载或类初始化的三个步骤:类的加载.类的连接.类的初始化 加载:类加载过程的一个阶段:通过一个类的完全限定查找此类字节码文件,并利用 ...

  7. Python+Requests+Bs4(解析)爬取某诗词信息(数据分析二)

    1.环境安装 - 需要将pip源设置为国内源,阿里源.豆瓣源.网易源等 - windows (1)打开文件资源管理器(文件夹地址栏中) (2)地址栏上面输入 %appdata% (3)在这里面新建一个 ...

  8. 小程序框架WePY 从入门到放弃踩坑合集

    小程序框架WePY 从入门到放弃踩坑合集 一点点介绍WePY 因为小程序的语法设计略迷, 所以x1 模块化起来并不方便, 所以x2 各厂就出了不少的框架用以方便小程序的开发, 腾讯看到别人家都出了框架 ...

  9. jenkens安装教程

    war包安装方式(linux和windows下) 具体参见:https://www.cnblogs.com/UncleYong/p/10742867.html

  10. javascript学习五---OOP

    面向对象:JavaScript的所有数据都可以看成对象 JavaScript的面向对象编程和大多数其他语言如Java.C#的面向对象编程都不太一样.如果你熟悉Java或C#,很好,你一定明白面向对象的 ...