导出数据库表以及备注为excel

import com.alibaba.excel.annotation.ExcelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor; @Data
@NoArgsConstructor
@AllArgsConstructor
public class FieldData{
//表名
@ExcelProperty(value = "表名", index = 0)
private String tableName;
//表字段
@ExcelProperty(value = "表字段", index = 1)
private String field;
//表字段类型
@ExcelProperty(value = "表字段类型", index = 2)
private String fieldType;
//表字段备注
@ExcelProperty(value = "表字段备注", index = 3)
private String fieldCommit;
}

import com.alibaba.excel.annotation.ExcelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor; @Data
@NoArgsConstructor
@AllArgsConstructor
public class TableData {
//表名
@ExcelProperty(value = "表名", index = 0)
private String tableName;
//表备注
@ExcelProperty(value = "表备注", index = 1)
private String remark;
}

import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.ExcelWriter;
import com.alibaba.excel.write.metadata.WriteSheet; import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern; public class Test{
private final static String fileName = "D:\\MyDocuments\\wangyong77\\桌面\\topTable3.xlsx";
private final static String driver = "com.mysql.cj.jdbc.Driver";
private final static String ip = "10.130.201.237:";
private final static String user = "tkbus";
private final static String password = "tkbus123";
private final static String mydata = "tkbus"; private static Connection conn; public static void main(String[] args) {
DBinit ();
getTableInfo ();
DBclose ();
} public static void getTableInfo() {
try {
//获取数据库的元数据
DatabaseMetaData dbMetaData = conn.getMetaData ();
System.out.println ("---------------获取" + conn.getCatalog () + "库的所有表名----------------");
//从元数据中获取到所有的表名
ResultSet rs = dbMetaData.getTables (conn.getCatalog (),null,null,new String[]{"TABLE"});
//存放所有表名
List<String> tableNames = new ArrayList<> ();
//存放当前表的字段
List<String> fields = new ArrayList<> ();
//存放当前表的字段类型
List<String> fieldstype = new ArrayList<> ();
//存放当前表的字段属性
List<String> commits = new ArrayList<> ();
List<TableData> tableList = new ArrayList ();
Map<Integer,List<FieldData>> map = new HashMap<> ();
TableData table;
while (rs.next ()) {
// System.out.println("表名: "+rs.getString("TABLE_NAME"));
// System.out.println("表类型: "+rs.getString("TABLE_TYPE"));
// System.out.println("表所属数据库: "+rs.getString("TABLE_CAT"));
// System.out.println("表所属用户名: "+rs.getString("TABLE_SCHEM"));
// System.out.println("表备注: "+rs.getString("REMARKS"));
if (rs.getString ("TABLE_NAME").contains ("copy") || HasDigit (rs.getString ("TABLE_NAME"))) {
continue;
}
tableNames.add (rs.getString ("TABLE_NAME"));
table = new TableData ();
table.setTableName (rs.getString ("TABLE_NAME"));
table.setRemark (rs.getString ("REMARKS"));
tableList.add (table);
}
//查询每个表的字段
for (int i = 0;i < tableNames.size ();i++) {
List<FieldData> filedlist = new ArrayList ();
if (tableNames.get (i).contains ("copy") || HasDigit (tableNames.get (i))) {
continue;
}
String sql = "select * from " + tableNames.get (i);
System.out.println ("表开始" + tableNames.get (i));
PreparedStatement ps = conn.prepareStatement (sql);
ResultSet rstable = ps.executeQuery ();
//结果集元数据
ResultSetMetaData meta = rstable.getMetaData ();
//表列数量
int columeCount = meta.getColumnCount ();
FieldData data;
for (int k = 1;k <= columeCount;k++) {
data = new FieldData ();
data.setTableName (tableNames.get (i));
data.setField (meta.getColumnName (k));
data.setFieldType (meta.getColumnTypeName (k));
filedlist.add (data);
fields.add (meta.getColumnName (k));
fieldstype.add (meta.getColumnTypeName (k));
}
// System.out.println("表"+tableNames.get(i)+"字段: "+fields);
// System.out.println("表"+tableNames.get(i)+"字段类型: "+fieldstype);
fields.clear ();
ResultSet rs1 = rs = ps.executeQuery ("show full columns from " + tableNames.get (i));
while (rs1.next ()) {
commits.add (rs.getString ("Comment"));
}
// System.out.println("表"+tableNames.get(i)+"字段备注类型: "+commits);
for (int j = 0;j < filedlist.size ();j++) {
filedlist.get (j).setFieldCommit (commits.get (j));
}
map.put (i,filedlist);
commits.clear ();
System.out.println ("表完成" + tableNames.get (i));
}
// createTableExcel(tableList);
createExcel (map);
} catch (Exception e) {
e.printStackTrace ();
}
} public static void DBinit() {
//驱动程序名
Properties props = new Properties ();
props.put ("user",user);
props.put ("password",password);
props.put ("useInformationSchema","true"); //表注释
//不同端口号
String[] db_url_port = {"3306"};
//数据库服务器
String dbServer;
for (String db_port : db_url_port) {
dbServer = ip + db_port;
//URL指向要访问的数据库名mydata
String url = "jdbc:mysql://" + dbServer + "/" + mydata;
try {
Class.forName (driver);
//声明Connection对象
conn = DriverManager.getConnection (url,props);
if (!conn.isClosed ()) {
System.out.println ("当前访问数据库端口号为" + db_port + ",数据库连接成功!");
break;
}
} catch (Exception e) {
System.out.println ("当前访问数据库端口号为" + db_port + ",数据库连接失败!");
continue;
}
}
} public static void DBclose() {
try {
conn.close ();
} catch (SQLException e) {
System.out.println ("数据关闭异常");
e.printStackTrace ();
}
} /**
* 生成表内容详细信息
* @param map
*/
public static void createExcel(Map<Integer,List<FieldData>> map) {
System.out.println ("开始写入excel");
ExcelWriter excelWriter = EasyExcel.write (fileName).build ();
WriteSheet writeSheet;
//map根据key排序
for (Map.Entry<Integer,List<FieldData>> map1 : map.entrySet ()) {
// EasyExcel.write(fileName, FieldData.class).sheet(map1.getKey()).doWrite(map1.getValue());
// 每次都要创建writeSheet 这里注意必须指定sheetNo。这里注意DemoData.class 可以每次都变,我这里为了方便 所以用的同一个class 实际上可以一直变
writeSheet = EasyExcel.writerSheet (map1.getKey (),map1.getValue ().get (0).getTableName ()).head (FieldData.class).build ();
// 分页去数据库查询数据 这里可以去数据库查询每一页的数据
excelWriter.write (map1.getValue (),writeSheet);
}
excelWriter.finish ();
System.out.println ("excel生成完毕");
} /**
* 生成表信息
* @param tableList
*/
public static void createTableExcel(List<TableData> tableList) {
System.out.println ("开始写入Tableexcel");
EasyExcel.write (fileName,TableData.class).sheet ("top表").doWrite (tableList);
System.out.println ("Tableexcel生成完毕");
} public static boolean HasDigit(String content) {
boolean flag = false;
Pattern p = Pattern.compile (".*\\d+.*");
Matcher m = p.matcher (content);
if (m.matches ()) {
flag = true;
}
return flag;
} }
import com.alibaba.excel.annotation.ExcelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@NoArgsConstructor
@AllArgsConstructor
public class FieldData{
//表名
@ExcelProperty(value = "表名", index = 0)
private String tableName;
//表字段
@ExcelProperty(value = "表字段", index = 1)
private String field;
//表字段类型
@ExcelProperty(value = "表字段类型", index = 2)
private String fieldType;
//表字段备注
@ExcelProperty(value = "表字段备注", index = 3)
private String fieldCommit;
}
导出数据库表以及备注为excel的更多相关文章
- 关于PowerDesigner导出数据库表到word文档
关于PowerDesigner导出数据库表到word文档 一.查看全部模板: powerdesigner默觉得我们提供了非常多的模版,在工具栏中选择[Report(报告)--->Report T ...
- [mysql] mysqldump 导出数据库表
1.mysqldump的几种常用方法: (1)导出整个数据库(包括数据库中的数据) mysqldump -u username -p dbname > dbname.sql (2)导出数据库结构 ...
- Java 导出数据库表信息生成Word文档
一.前言 最近看见朋友写了一个导出数据库生成word文档的业务,感觉很有意思,研究了一下,这里也拿出来与大家分享一波~ 先来看看生成的word文档效果吧 下面我们也来一起简单的实现吧 二.Java 导 ...
- 批量导出数据库表(oracle)
批量导出数据库表(oracle) 要求:导出sql文件,包含表结构和数据. 方案一 1:用cmd进入命令行输入:tnsping cmstar就是测试172.18.13.200是否连接成功2:导入与导出 ...
- [转]使用Navicat导入导出数据库表
原文地址:https://blog.csdn.net/anselandevil/article/details/81667199 步骤1:数据中原始数据如下: 点击表,右键选择导出向导,选择导出为sq ...
- 使用mysqldump导出数据库(表)
mysqldump用来备份数据库或在不同数据库之间迁移数据,mydqldump的备份内容包括用来创建表和装载表的SQL语句. 一.mysqldump使用方法 (1).备份单个数据库或数据库中的部分表, ...
- Sql Server 导出数据库表结构的SQL查询语句
--导出数据库所有表 SELECT 表名 Then D.name Else '' End, 表说明 Then isnull(F.value,'') Else '' End, 字段序号 = A.colo ...
- mysql客户端的导出数据库表和数据库数据等相关操作
1.navicat for mysql 11.0.10客户端 导出数据库里所有表中的所有数据,方法如下,选中表,在横向导航栏里面找到“导出向导”,选中sql,点击下一步,点击全选,并且选中“应用相同目 ...
- mysql导出数据库表名与字段信息
一.导出数据库表格信息 #mysql导出库的表格信息 SELECT A.TABLE_SCHEMA, A.TABLE_NAME, A.TABLE_ROWS, A.CREATE_TIME, A.TABLE ...
- 导出----用Excel导出数据库表
根据条件导出表格: 前端 <el-form-item label=""> <el-button type="warning" icon=&qu ...
随机推荐
- centos7.6 dokcer-compose在线和离线安装
在线安装可参考官网文档:https://docs.docker.com/compose/install/#install-compose curl -SL https://github.com/doc ...
- echarts学习
一.安装与引入 1.安装npm install echarts --save 2.引入import * as echarts from 'echarts';(main.js里全局引入) 二.详细概念 ...
- Excel error - the macros in this project are disabled, please refer to the online help or documentation of the host application to determine how to enable macros.
alt+F11 进入vba界面,F5运行macro后报错. Sub 合并当前工作簿下的所有工作表() Application.ScreenUpdating = False For j = 1 To S ...
- SY有了不适症状吃抗过敏药试试
有了不适症状吃抗过敏药试试 Therapy for the eyes Providing welcome relief from the effects of daily stresses on th ...
- mybatis 一级、二级缓存机制
MyBatis 提供了对缓存的支持,分为一级缓存和二级缓存 一级缓存是 SqlSession 级别的缓存.在操作数据库时需要构造 SqlSession 对象,在对象中有一个数据结构(HashMap)用 ...
- Finance财务软件(月度结转专题)
支持按模板结转 默认结转模板 1.结转收入 借: 6001 主营业务收入 6051 其他业务收入 6301 营业外收入 贷: 4103 本年利润 2.结转成本.费用和税金 借: 4103 本年利润 贷 ...
- Navie UI
开发文档 一个 Vue 3 组件库, 它比较完整,主题可调,用 TypeScript 写的,快.
- JDBC之ResultSet和元数据
ResultSet 从名字上就可以看到是结果集,表示的是查询出来的结果集. JDBC用ResultSet来封装结果集,查询结果表的对象. 查询结果分为两种情况: 单值 单个结果,比如说SQL如下: s ...
- Redis之Redis缓存管理机制
Redis缓存管理机制 目录 Redis缓存管理机制 缓存过期 && 缓存淘汰 缓存穿透 && 布隆过滤器 缓存击穿 && 缓存雪崩 总结 彩蛋 从博客 ...
- SPI接口
串行外设接口(Serial Peripheral Interface)是一种同步外设接口,它可以使单片机与各种外围设备以串行方式进行通信以交换信息.SPI最早是Motorola公司提出的全双工三线同步 ...