一、需求

我们会遇到开发任务:

经理:小王,你来做一下把数据库里的数据导出到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. Java:Java中static关键字作用

    static关键字最基本的用法是: 1.被static修饰的变量属于类变量,可以通过类名.变量名直接引用,而不需要new出一个类来 2.被static修饰的方法属于类方法,可以通过类名.方法名直接引用 ...

  2. 其他:Git生成SSH、Git生成本地库、下载远程库代码 命令

    1.安装Git Bash https://git-scm.com/downloads 2.鼠标右键git bash here 3.执行以下命令: ①   cd ~/.ssh/    [如果没有对应的文 ...

  3. PHP设计模式之策略模式(转)

      介绍 策略模式:定义了算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户. 封装:把行为用接口封装起来,我们可以把那些经常变化的部分,从当前的类中单独取出来,用接 ...

  4. php微信jsapi支付 支付宝支付 两码合一

    产品开会提出了这样的需求:一个二维码可以微信支付也可以支付宝支付 经过自己的钻研以及询问技术高人(本人代码一般般)和网上搜索 最终实现其功能  我用微信jsapi 和 支付宝网页支付 其实并不怎么难: ...

  5. excle名字后面直接跟别的出来

    名字后面直接跟别的出来 =IF($E6="","",VLOOKUP(E6,通讯录!$B$2:$D$1000,3,0)) $E6:是填写位置的地方 VLOOKUP ...

  6. 鸟哥的Linux私房菜基础学习篇--进程(process)一 归纳总结

    权限!权限!权限! 没有权限,一些资源你是没办法使用的.在Linux中cat filename,结果屏幕显示了filename的内容,为什么你能看见,而我不能?权限.与UID/GID有关,与文件的属性 ...

  7. Bat脚本备份sqlserver 表结构、存储过程、函数、指定表数据

    Bat脚本备份sqlserver 表结构.存储过程.指定表数据: @echo off cd /d %~dp0 ::备份表结构.存储过程和部分配置表的数据 set LogFile=report.log ...

  8. Pytest单元测试框架之简单操作示例

    前言: Pytest是第三方单元格测试框架,更加简单,灵活,而且提供了更多丰富的扩展: Pytest与UnitTest框架的区别 UnitTest测试用例执行顺序是依照ascii码执行,而Pytest ...

  9. 莫比乌斯反演&整除分块学习笔记

    整除分块 用于计算$\sum_{i=1}^n f(\lfloor{n/i} \rfloor)*i$之类的函数 整除的话其实很多函数值是一样的,对于每一块一样的商集中处理即可 若一个商的左边界为l,则右 ...

  10. Java 批量删除Word中的空白段落

    1. 测试文档.期望达到的目标文档效果 用于测试的Word文档如下所示,包含的空白段落影响文章整体布局及美观性: 目标文档效果: 2. 辅助工具 2.1 使用类库:Free Spire.Doc for ...