导出数据库中所有数据到Excle中
Workbook wb = new HSSFWorkbook();//创建工作簿
Connection conn = DataSourceUtils.getDataSource().getConnection();//获取数据库连接
Statement stmt = conn.createStatement();
DatabaseMetaData dbmd = conn.getMetaData();//获取结果集conn的所有信息
ResultSet dnset = dbmd.getCatalogs();//获取数据库目录
while (dnset.next()) {//遍历所有数据库
String dbName = dnset.getString("TABLE_CAT");//获取所有数据库名称
{
ResultSet tSet = dbmd.getTables(dbName, dbName, null,new String[] { "TABLE" });
while (tSet.next()) {//遍历数据库中所有表
String tName = tSet.getString("TABLE_NAME");
stmt.execute("use " + dbName);//
String sql = "select * from " + tName;
Sheet sheet = wb.createSheet(tName);//为表创建一个sheet
Row row = sheet.createRow();//
ResultSet rSet = stmt.executeQuery(sql);
ResultSetMetaData rsmd = rSet.getMetaData();
int count = rsmd.getColumnCount();
List<String> list = new ArrayList<String>();
for (int i = ; i < count; i++) {//获取表头并保存到cell中
String name = rsmd.getColumnName(i + );
row.createCell(i).setCellValue(name);
list.add(name);
}
int i = ;
while (rSet.next()) {//讲查询数据保存到cell中
i++;
int j = ;
Row row2 = sheet.createRow(i);
for (String s : list) {
String value = rSet.getString(s);
Cell cell = row2.createCell(j);
cell.setCellValue(value);
j++;
}
}
FileOutputStream out = new FileOutputStream("d:/a.xls");//写入workbook
wb.write(out);
out.close();
}
}
} System.out.println("Success");


加强:有的数据库中不允许Result嵌套,所以需要把数据暂存到List中进行加强,提高兼容性
Workbook wb = new HSSFWorkbook();//创建工作簿
Connection conn = DataSourceUtils.getDataSource().getConnection();//获取数据库连接
Statement stmt = conn.createStatement();
DatabaseMetaData dbmd = conn.getMetaData();//获取结果集conn的所有信息
ResultSet dnset = dbmd.getCatalogs();//获取数据库目录
List<String> dbnameList=new ArrayList<String>();//数据库名
while (dnset.next()) {//遍历所有数据库
String dbName = dnset.getString("TABLE_CAT");//获取所有数据库名称
dbnameList.add(dbName);
} for(String dbName:dbnameList)
{
List<String> tanameList=new ArrayList<String>();//数据库中表名
ResultSet tSet = dbmd.getTables(dbName, dbName, null,new String[] { "TABLE" });
while (tSet.next()) {//遍历数据库中所有表
String tName = tSet.getString("TABLE_NAME");
tanameList.add(tName);
} stmt.execute("use " + dbName);//
for(String tName:tanameList)
{
String sql = "select * from " + tName;
Sheet sheet = wb.createSheet(tName);//为表创建一个sheet
Row row = sheet.createRow(0);//
ResultSet rSet = stmt.executeQuery(sql);
ResultSetMetaData rsmd = rSet.getMetaData();
int count = rsmd.getColumnCount();
List<String> list = new ArrayList<String>();
for (int i = 0; i < count; i++) {//获取表头并保存到cell中
String name = rsmd.getColumnName(i + 1);
row.createCell(i).setCellValue(name);
list.add(name);
}
int i = 0;
while (rSet.next()) {//讲查询数据保存到cell中
i++;
int j = 0;
Row row2 = sheet.createRow(i);
for (String s : list) {
String value = rSet.getString(s);
Cell cell = row2.createCell(j);
cell.setCellValue(value);
j++;
}
}
FileOutputStream out = new FileOutputStream("d:/a.xls");//写入workbook
wb.write(out);
out.close();
}
}
System.out.println("Success");
导出数据库中所有数据到Excle中的更多相关文章
- Hive扩展功能(三)--使用UDF函数将Hive中的数据插入MySQL中
软件环境: linux系统: CentOS6.7 Hadoop版本: 2.6.5 zookeeper版本: 3.4.8 主机配置: 一共m1, m2, m3这五部机, 每部主机的用户名都为centos ...
- SQLServer2008 和SQLServer2008 R2版本导出 数据库结构和数据sql
①SQLServer2008 版本导出 数据库结构和数据sql ②SQLServer2008R2 版本导出 数据库结构和数据sql 采集 #HUABAN_WIDGETS .HUABAN-red-nor ...
- 一个I/O线程可以并发处理N个客户端连接和读写操作 I/O复用模型 基于Buf操作NIO可以读取任意位置的数据 Channel中读取数据到Buffer中或将数据 Buffer 中写入到 Channel 事件驱动消息通知观察者模式
Tomcat那些事儿 https://mp.weixin.qq.com/s?__biz=MzI3MTEwODc5Ng==&mid=2650860016&idx=2&sn=549 ...
- flink04 -----1 kafkaSource 2. kafkaSource的偏移量的存储位置 3 将kafka中的数据写入redis中去 4 将kafka中的数据写入mysql中去
1. kafkaSource 见官方文档 2. kafkaSource的偏移量的存储位置 默认存在kafka的特殊topic中,但也可以设置参数让其不存在kafka的特殊topic中 3 将k ...
- Oracle数据库间的数据复制 - SQLPlus中的COPY命令
Copy命令可以实现不同Oracle数据库间的数据的复制,也是可以实现同一数据库的数据复制,其性能表现和导入/导出相同. 根据9i文档,说Copy命令未来会不支持,但实际上Oracle 11g仍然支持 ...
- 使用NPOI导入导出Excel(xls/xlsx)数据到DataTable中
using System; using System.Collections.Generic; using System.Text; using System.IO; using NPOI.SS.Us ...
- winfrom 使用NPOI导入导出Excel(xls/xlsx)数据到DataTable中
1.通过NUGET管理器下载nopi,在引入命令空间 using System; using System.Collections.Generic; using System.Text; using ...
- C# 读取Excel中的数据到DataTable中
原文地址:http://www.open-open.com/code/view/1420029490093 public DataTable ExcelToDS(string Path) { stri ...
- 映射Xml文件中的数据到JavaBean中
使用Java原生的javax.xml.bind包下的JAXBContext将一个Xml文件中的数据映射到一个JavaBean中 import java.io.File; import java.io. ...
随机推荐
- JavaScript不一样的语法
JavaScript除了面向对象的部分,基本语法和C语言类似,但是也有一些自己的特别之处,现总结如下: (1)break和continue后面可以跟label 语法: break labelname; ...
- phpmyadmin密码字段加密方法
UPDATE member SET password=md5('password')
- WinMain与WndProc以及窗口诞生过程总结
一.int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR szCmdLine, int nCmdShow) 四个 ...
- Git的思想和基本工作原理
Git的思想和基本工作原理 Chapter: 开始了解Git 1. 先谈谈版本控制的一些事 2. Git诞生背后的一些故事 3. 版本控制:集中式VS分布式 4. Git的思想和基本工作原理 5. G ...
- Ubuntu12.04 下搭建Java开发环境
1:下载 jdk-7u40-linux-i586.tar.gz. 2:解压安装. (1)创建jvm目录:sudo mkdir -p /usr/lib/jvm (2)sudo tar zxvf ./ j ...
- Android百度地图默认位置中心点设置
//初始化地图 MapView mMapView = (MapView) findViewById(R.id.map); BaiduMap mBaidumap = mMapView.getMap ...
- nodejs 记入
1. vs2015 使用最新的 nodejs refer : http://josharepoint.com/2016/05/04/how-to-configure-visual-studio-201 ...
- 关于C51中“大小端存储”问题的详解
1. Little-Endian(小端存储),即将低字节的数据存储于低地址中,Big-Endian(大端存储)反之. 2. 小端存储称为Intel模式,大端存储称为Motorola模式. 3. C51 ...
- MFC关于VS内存释放的定位
全部在App中完成 1.在 App.h 头文件声明 #ifdef _DEBUGprotected: CMemoryState m_msOld, m_msNew, m_msDiff;#endi ...
- HDU_2020——按绝对值排序
Problem Description 输入n(n<=100)个整数,按照绝对值从大到小排序后输出.题目保证对于每一个测试实例,所有的数的绝对值都不相等. Input 输入数据有多组,每组占 ...