前言

导出数据库表结构到word文档。

效果展示

CREATE TABLE `user_info` (`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',`refer_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '关联id',`phone` char(11) NOT NULL DEFAULT '' COMMENT '手机号',`name` varchar(32) NOT NULL DEFAULT '' COMMENT '名称',`age` int(2) NOT NULL DEFAULT '0' COMMENT '年龄',`salary` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT '值',`create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',`update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',`is_deleted` tinyint(2) NOT NULL DEFAULT '0' COMMENT '删除标识(0: 正常,1: 已删除)',PRIMARY KEY (`id`),KEY `idx_phone` (`phone`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户表';

word文档

废话不多说,直接上代码

Test.java

import org.apache.commons.collections4.CollectionUtils;
import org.apache.poi.xwpf.usermodel.*;
import org.springframework.util.StringUtils;import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.List;public class Test {public static void main(String[] args) {XWPFDocument doc = new XWPFDocument();XWPFParagraph paragraph_title = doc.createParagraph();XWPFRun run_title = paragraph_title.createRun();run_title.setText("数据库表设计文档");run_title.setFontSize(16);run_title.setBold(true);FileOutputStream out = null;try {//数据库名String dbName = "dbName";//获取指定数据库的所有表信息List<Table> tableInfos = TableUtil.getTableInfos(dbName);if (CollectionUtils.isNotEmpty(tableInfos)) {for (int i = 0; i < tableInfos.size(); i++) {makeTable(doc, tableInfos.get(i), i);}}String filePath = "D:/数据库表设计文档.docx";out = new FileOutputStream(new File(filePath));doc.write(out);} catch (Exception e) {e.printStackTrace();} finally {if (out != null) {try {out.close();} catch (IOException e) {e.printStackTrace();}}}}/*** 制作表格** @param doc* @param tableInfo* @param pos*/private static void makeTable(XWPFDocument doc, Table tableInfo, Integer pos) {//换行XWPFParagraph paragraph_linebreak = doc.createParagraph();XWPFRun run_linebreak = paragraph_linebreak.createRun();run_linebreak.addBreak();run_linebreak.setBold(true);//表名XWPFParagraph paragraph_tablename = doc.createParagraph();XWPFRun run_tablename = paragraph_tablename.createRun();String tableName = "";if (StringUtils.isEmpty(tableInfo.getTABLE_COMMENT())) {tableName = "表名" + tableInfo.getTABLE_NAME();} else {tableName = "表名" + tableInfo.getTABLE_NAME() + "(" + tableInfo.getTABLE_COMMENT() + ")";}run_tablename.setText(tableName);run_tablename.setFontSize(14);run_tablename.setBold(true);//字段集合List<Column> columns = tableInfo.getColumns();//行数(字段数 + 标题行)int rows = columns.size() + 1;//列数int cols = 6;//创建表XWPFTable table = doc.createTable(rows, 6);//宽度table.setWidth(8000);//获取第 1 行XWPFTableRow row_title = table.getRow(0);//设置第 1 行单元格内容row_title.getCell(0).setText("字段名");row_title.getCell(1).setText("字段说明");row_title.getCell(2).setText("数据类型");row_title.getCell(3).setText("是否可为空");row_title.getCell(4).setText("默认值");row_title.getCell(5).setText("索引");//设置第 1 行单元格背景色for (int i = 0; i < cols; i++) {row_title.getCell(i).setColor("97FFFF");}//将数据库表字段信息写入表格中for (int i = 0; i < columns.size(); i++) {Column column = columns.get(i);XWPFTableRow row = table.getRow(i + 1);row.getCell(0).setText(column.getCOLUMN_NAME());row.getCell(1).setText(column.getCOLUMN_COMMENT());row.getCell(2).setText(column.getCOLUMN_TYPE());row.getCell(3).setText(column.getIS_NULLABLE());row.getCell(4).setText(column.getCOLUMN_DEFAULT());row.getCell(5).setText(column.getCOLUMN_KEY());}doc.setTable(pos, table);}
}

TableUtil.groovy

import groovy.sql.Sql;class TableUtil {/*** 获取指定数据库的所有表信息** @param dbName* @return*/static List<Table> getTableInfos(String dbName) {Sql sql = Sql.newInstance("jdbc:mysql://127.0.0.1:3306/" + dbName + "?characterEncoding=UTF-8&useCursorFetch=true&defaultFetchSize=1000&useOldAliasMetadataBehavior=true","user","password")def resultOfTables = sql.rows("SELECT t.TABLE_NAME,t.TABLE_COMMENT,t.ENGINE \n" +"\tFROM INFORMATION_SCHEMA.TABLES t \n" +"\tWHERE t.TABLE_SCHEMA='" + dbName + "';")def tables = new ArrayList<Table>()if (resultOfTables) {for (int i = 0; i < resultOfTables.size(); i++) {Table table = resultOfTables[i]def resultOfColumns = sql.rows("SELECT c.COLUMN_NAME,c.COLUMN_TYPE,c.COLUMN_COMMENT,c.COLUMN_DEFAULT,c.COLUMN_KEY,c.IS_NULLABLE\n" +"\tFROM INFORMATION_SCHEMA.COLUMNS c \n" +"\tWHERE c.TABLE_SCHEMA='" + dbName + "' AND c.TABLE_NAME=?; ", [table.getTABLE_NAME()])if (resultOfColumns) {def columns = new ArrayList<Column>()for (int j = 0; j < resultOfColumns.size(); j++) {Column column = resultOfColumns[j]columns.add(column)}table.setColumns(columns)}tables.add(table)}}return tables}
}

Table.java

import lombok.Data;
import java.util.List;@Data
public class Table {private String TABLE_NAME;private String TABLE_COMMENT;private String ENGINE;private List<Column> columns;
}

Column.java

import lombok.Data;@Data
public class Column {private String COLUMN_NAME;private String COLUMN_TYPE;private String COLUMN_COMMENT;private String COLUMN_DEFAULT;private String COLUMN_KEY;private String IS_NULLABLE;
}

说明

这里为了方便调用sql,因此TableUtil使用了groovy开发。在java中使用groovy,需要引入groovy的依赖。当然了,如果不想使用groovy,可以使用jdbc/mybatis/jdbcTemplate等。

<dependency><groupId>org.codehaus.groovy</groupId><artifactId>groovy-all</artifactId><version>3.0.4</version><type>pom</type>
</dependency>

导出数据库表结构word文档相关推荐

  1. 自动生成数据库表结构word文档的工具(一)---- DBDocumentGenerator

    背景: 项目中需要编写数据库表结构文档,手动编写繁琐,格式难统一,且易出错,有没有自动生成数据库表结构文档的工具 方案 DBDocumentGenerator 数据字典生成工具,用于生成 数据库表 及 ...

  2. 导出mysql数据库表生成word文档

    前段时间产品突然提了个需求,要求写出项目组的所有表的文档,由于数据库里面表非常多,手写肯定不行,而且容易出错,就做了个项目,以后导数据库文档,直接就可以用了. 项目结构是springboot+myba ...

  3. PowerDesigner导出数据库表结构word

    打开PowerDesigner新建模型(系统环境变量必须配置32位JDK,否决将出现无法创建JavaVM错误信息powerdesigner Could not Initialize JavaVM!) ...

  4. python自动化导出数据库表结构到word

    导出数据库表文档到word. 使用pyhton的python-docx框架实现导出数据库表结构为word格式. 前言: 本人自学python,语法不精通,参考人员注意甄别. 问题: 由于近期甲方项目需 ...

  5. navicat查询oracle表结构,利用Navicat Premium导出数据库表结构信息至Excel的方法

    因为要编写设计文档,需要用到数据库表结构,想要在word文档中以二维表格的形式展示,故借助Excel形成二维表格样式,还是很方便的样子! 1.新建查询,并将以下SQL语句修改至需要 SELECT CO ...

  6. Atitit db analysis statistics tonjyi fsy数据库统计分析目录1. Atitit 数据库表与注释文档与统计(表,说明) 11.1. 获取表列表 数据库包含哪些

    Atitit db analysis statistics tonjyi fsy数据库统计分析 目录 1. Atitit 数据库表与注释文档与统计(表,说明)    1 1.1. 获取表列表 数据库包 ...

  7. navicat导出数据库表结构及数据

    前言 我们在开发中使用数据库时往往需要做一些备份之类的,或者需要导出下表结构导入到其他数据库等 本文介绍下使用navicat导出数据库表结构.表数据 导出表结构.数据 1.选择工具->数据传输 ...

  8. 【保姆式教程】用PowerDesigner导出数据库表结构为Word/Excel表格

    使用PowerDesigner将表结构导出到word表格 一. PowerDesigner的下载安装 (已安装的跳过) PowerDesigner下载地址 后面只要next>>next&g ...

  9. mysql导出表结构word文档_如何将Word文档导出为长图片格式

    如何对word文档转化成潮图片格式呢?给大家分享一下,将word文档转化成图片具体方法,对大家能有所帮助. 方法/步骤 1 首先,如果想将word文档转化成图片格式文档,我们可以直接用word程序来实 ...

最新文章

  1. 入职体检——项目列表(11项)
  2. GPU Gems1 - 12 全方位的阴影映射
  3. LBS核心技术解析(引子)
  4. Python小白的数学建模课-05.0-1规划
  5. java开发之提高java和mysql代码性能和质量
  6. ccf矩阵java_CCF系列之矩阵(201512-5)
  7. 基于matlab的图像仿真研究,基于MATLAB的图像锐化算法研究与仿真
  8. 转移服务器显示乱码,两台服务器之间数据传输乱码问题
  9. 显示屏连接控制卡超时_天津塘沽、开发区怎么更改led电子显示屏字幕,如何修LED屏...
  10. 用友nc java下载_用友nc的java插件下载
  11. VARCHART XGantt资讯:视觉计划咨询服务现已在AppSource上
  12. 计算机设备名称设备型号含义,设备名称品牌型号资料.doc
  13. (一)Yocto的介绍
  14. Go语言channel
  15. 神经风格转移:Anaconda快速搭建DL框架学梵高(Van Gogh)绘画Ubuntu16.04 CPUGPU版
  16. 通过google插件Thumbnails实现图片指定大小压缩
  17. dotnetfx35
  18. 专科计算机专业能报考南方电网,想进南方电网工作?你必须得是这些专业的学生!...
  19. 丁香花开,又是一年毕业时
  20. 2021年了产品还是没有曝光?巨象跨境指纹浏览器教你2021年SNS营销不再落后

热门文章

  1. 想请教下墓碑机制相关?
  2. 计算机硬盘换,电脑硬盘更换步骤
  3. php摄氏度,一摄氏度的温暖
  4. 店铺销量需要怎么样进行提升
  5. 一款专业的日志分析软件——EventLog Analyzer
  6. 初学画画的小白怎么画人物的手
  7. 数字产业发展联盟_用数字表示联盟的象征
  8. NLP中数据增强的方法
  9. java网站页面静态化方案
  10. Try-catch语句的使用