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的更多相关文章

  1. 关于PowerDesigner导出数据库表到word文档

    关于PowerDesigner导出数据库表到word文档 一.查看全部模板: powerdesigner默觉得我们提供了非常多的模版,在工具栏中选择[Report(报告)--->Report T ...

  2. [mysql] mysqldump 导出数据库表

    1.mysqldump的几种常用方法: (1)导出整个数据库(包括数据库中的数据) mysqldump -u username -p dbname > dbname.sql (2)导出数据库结构 ...

  3. Java 导出数据库表信息生成Word文档

    一.前言 最近看见朋友写了一个导出数据库生成word文档的业务,感觉很有意思,研究了一下,这里也拿出来与大家分享一波~ 先来看看生成的word文档效果吧 下面我们也来一起简单的实现吧 二.Java 导 ...

  4. 批量导出数据库表(oracle)

    批量导出数据库表(oracle) 要求:导出sql文件,包含表结构和数据. 方案一 1:用cmd进入命令行输入:tnsping cmstar就是测试172.18.13.200是否连接成功2:导入与导出 ...

  5. [转]使用Navicat导入导出数据库表

    原文地址:https://blog.csdn.net/anselandevil/article/details/81667199 步骤1:数据中原始数据如下: 点击表,右键选择导出向导,选择导出为sq ...

  6. 使用mysqldump导出数据库(表)

    mysqldump用来备份数据库或在不同数据库之间迁移数据,mydqldump的备份内容包括用来创建表和装载表的SQL语句. 一.mysqldump使用方法 (1).备份单个数据库或数据库中的部分表, ...

  7. Sql Server 导出数据库表结构的SQL查询语句

    --导出数据库所有表 SELECT 表名 Then D.name Else '' End, 表说明 Then isnull(F.value,'') Else '' End, 字段序号 = A.colo ...

  8. mysql客户端的导出数据库表和数据库数据等相关操作

    1.navicat for mysql 11.0.10客户端 导出数据库里所有表中的所有数据,方法如下,选中表,在横向导航栏里面找到“导出向导”,选中sql,点击下一步,点击全选,并且选中“应用相同目 ...

  9. mysql导出数据库表名与字段信息

    一.导出数据库表格信息 #mysql导出库的表格信息 SELECT A.TABLE_SCHEMA, A.TABLE_NAME, A.TABLE_ROWS, A.CREATE_TIME, A.TABLE ...

  10. 导出----用Excel导出数据库表

    根据条件导出表格: 前端 <el-form-item label=""> <el-button type="warning" icon=&qu ...

随机推荐

  1. Java调用Kettle

    Java 调用 kettle,难的不是怎么调用,而是解决 maven 依赖冲突问题,直接将 kettle 依赖,添加到我们的 maven 工程,可能会导致代码大范围报错:解决方案也很简单,就是直接从 ...

  2. 使用myBadboy(python自主开发工具)启动谷歌浏览器并自动录制jmeter脚本

    一.源代码下载 https://gitee.com/rmtic/mybadboy 说明:因现有的录制方法有不能定制等不足之处,所以自力更生,自动生成对应jmeter脚本,减少维护成本 二.操作说明 1 ...

  3. 解析bean封装成BeanDefinition

    默认命名空间 1:parseDefaultElement 从代码中可以了解到默认的命名空间的一节节点主要是4种,import,alias,bean,beans private void parseDe ...

  4. Vue+element ui 笔记

    1)可以直接拿过来就用的样式 https://www.cnblogs.com/xiao987334176/p/14188413.html 2)对Table里面的每一项全部设定为选中 mounted() ...

  5. Oracle JDK 和 OpenJDK 有什么区别?

    OpenJDK是Sun在2006年末把Java开源而形成的项目,这里的"开源"是通常意义上的源码开放形式,即源码是可被复用的,例如IcedTea.UltraViolet都是从Ope ...

  6. mysql数据增量及备份操作

    注:当数据库出现异常的时候,我们可以先恢复最近一次的全量备份,接着将增量备份的文件一个一个按顺序恢复即可实现原来数据库的恢复. 还可以使用innobackupex 备份工具. 备份 # 1,开启 bi ...

  7. GIT迁移仓库地址时如何保留分支和历史记录

    需求背景 GIT仓库(GitLab)所在服务器因某些原因要关停,相关服务需转移到另外一台机器上. 操作步骤 # clone项目 git clone --mirror http://192.168.12 ...

  8. 互联网公司IT系统架构进化之路

    一日,与一高手在茶馆聊天.他问道:在鞋厂剑派这两年,可习的什么高深的剑法?我不由一愣,细细想来,这两年每日练习的都是简单的劈砍动作和一些简练的套路.并没有去练什么高深的剑法.不过鞋厂剑派在江湖上也算小 ...

  9. git - git常用操作命令

    1.创建一个空的仓库 git init 2.配置git仓库 配置姓名 git config --global user.name '张三' 配置邮箱 git config --global user. ...

  10. es6数组去重、数组中的对象去重 && 删除数组(按条件或指定具体元素 如:id)&& 筛选去掉没有子组件的父组件

    // 数组去重 { const arr = [1,2,3,4,1,23,5,2,3,5,6,7,8,undefined,null,null,undefined,true,false,true,'中文' ...