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. mmdetection3d安装

    conda create -n openmmlab python=3.7 -y conda activate openmmlab pip install torch==1.8.1+cu101 torc ...

  2. vue调接口导出表格

     props:{       form:{         type:Object,         default:()=>{}       },       indexNum:{       ...

  3. k8s_使用k8s部署博客系统deployment(四)

    mysql deployment 前面的nfs  pv pvc secret configmap service等k8s对象已经创建好了,准备工作已经完成:现在可以开始准备deployment配置文件 ...

  4. Iframe 默认高度、宽度

    项目中还在使用 Iframe ,一次看代码时发现 Iframe 没有指定高度.宽度,可是在页面上显示的时候却有高度.宽度.想着应该是 Iframe 的默认值,于是写了一个简单的页面,代码如下: 1 & ...

  5. 做文件上传功能时,dubbo对MultipartFile文件传输时,一个bug:Fail to decode request due to: RpcInvocation

    三月 22, 2019 2:37:27 下午 org.apache.catalina.core.StandardWrapperValve invoke 严重: Servlet.service() fo ...

  6. centos7 双网卡同网段双网关配置

    需求: #1.服务器为双网卡: #2.网卡1为互联网 172.16.137.99/24/254 #3.网卡2为旅游专网 172.16.137.97/24/1 #4.互联网路由器为172.16.137. ...

  7. 【C++复习】第七章 类的继承(基类、派生类、虚基类)

    1.基类与派生类 类的继承:面向对象的程序设计中提供了类的继承机制,允许程序员在保持原有类特性的基础上,进行更具体.更详细的定义 用途:代码的重用性(继承)和可扩充性(派生) 例:植物大战僵尸游戏中, ...

  8. sed: -e 表达式 #1, 字符 1: 未知的命令:“'”

    https://blog.csdn.net/linmingan/article/details/80007727 加双引号!! 利用sed更改文件test.txt的第一行为abc: sed -i '1 ...

  9. android手机无线调试

    1.手机与电脑先通过usb链接2.adb devices查看是否链接成功(链接成功会显示设备列表)3.adb tcpip 5555(0-65535之间取值,默认5555输进去)5:断开数据线,查看手机 ...

  10. 给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组

    var threeSum = function(nums) {let ans = [];const len = nums.length;if(nums == null || len < 3) r ...