导出文档示例:

说明,文档是基poi工具来生成的(主要是依赖与数据库名正确的话可以直接运行)

一、需要的依赖

<dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>4.1.0</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>4.1.0</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency>

二具体代码

package com.example.mypoidemo.poi;import java.io.File;
import java.io.FileOutputStream;
import java.math.BigInteger;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;import org.apache.poi.xwpf.usermodel.ParagraphAlignment;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFParagraph;
import org.apache.poi.xwpf.usermodel.XWPFRun;
import org.apache.poi.xwpf.usermodel.XWPFTable;
import org.apache.poi.xwpf.usermodel.XWPFTableCell;
import org.apache.poi.xwpf.usermodel.XWPFTableRow;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTJc;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTP;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTPPr;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTbl;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTblGrid;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTblGridCol;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTc;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.STJc;import com.alibaba.fastjson.JSONObject;public class WordExportTable {public static final String driverUrl = "jdbc:mysql://127.0.0.1:3306/snowy-pub?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&useSSL=false";public static final String username = "root";public static final String password = "123456";/*** 导出数据库需要与driverUrl中连接的数据库一致*/public static final String dataBase = "snowy-pub";/*** 不需要导出的表,可为null*/public static final String notTbales = "'survey','survey_answer_down'";/*** 匹配前缀不导出,可为null*/public static final String notLike = "'sys_%'";/*** 文档标题*/public static final String title = "数据库设计详细说明书";/*** 输出文档地址*/public static final String path = "d:\\";/*** 输出文档名称*/public static final String fileName = "数据库设计详细说明书V1.0.0.docx";public static void main(String[] args)throws Exception {//Blank DocumentXWPFDocument document= new XWPFDocument();//添加标题XWPFParagraph titleParagraph = document.createParagraph();//设置段落居中titleParagraph.setAlignment(ParagraphAlignment.CENTER);XWPFRun titleParagraphRun = titleParagraph.createRun();titleParagraphRun.setText(title);titleParagraphRun.setColor("000000");titleParagraphRun.setFontSize(20);WordExportTable we = new WordExportTable();List<JSONObject> list= we.getTables(dataBase);for (JSONObject json : list) {List<String[]> columns = we.getTablesDetail(dataBase, json.getString("name"));addTable(document, json.getString("name"), json.getString("remark"), columns);}//Write the Document in file systemFileOutputStream out = new FileOutputStream(new File(path+fileName));document.write(out);out.close();System.out.println("create_table document written success.");}private  List<String[]> getTablesDetail(String schema, String tableName){List<String[]> list = new ArrayList<>();Connection connection = null;PreparedStatement preparedStatement = null;ResultSet resultSet = null;try {//加载数据库驱动Class.forName("com.mysql.jdbc.Driver");//通过驱动管理类获取数据库链接connection =  DriverManager.getConnection(driverUrl, username, password);//定义sql语句 ?表示占位符String sql = "SELECT COLUMN_NAME  , COLUMN_TYPE  ,  COLUMN_DEFAULT  , IS_NULLABLE  ,  COLUMN_COMMENT "+" FROM INFORMATION_SCHEMA.COLUMNS    WHERE  table_schema = ? and table_name = ?  ";//获取预处理statementpreparedStatement = connection.prepareStatement(sql);//设置参数,第一个参数为sql语句中参数的序号(从1开始),第二个参数为设置的参数值preparedStatement.setString(1, schema);preparedStatement.setString(2, tableName);//向数据库发出sql执行查询,查询出结果集resultSet =  preparedStatement.executeQuery();int i = 1;//遍历查询结果集while(resultSet.next()){String[] str = new String[7];str[0] = i+"";str[1] = resultSet.getString("COLUMN_NAME");str[2] = resultSet.getString("COLUMN_TYPE");str[3] = resultSet.getString("COLUMN_DEFAULT");str[4] = resultSet.getString("IS_NULLABLE");str[5] = "";str[6] = resultSet.getString("COLUMN_COMMENT");list.add(str);i++;}} catch (Exception e) {e.printStackTrace();}finally{//释放资源if(resultSet!=null){try {resultSet.close();} catch (SQLException e) {e.printStackTrace();}}if(preparedStatement!=null){try {preparedStatement.close();} catch (SQLException e) {e.printStackTrace();}}if(connection!=null){try {connection.close();} catch (SQLException e) {e.printStackTrace();}}}return list;}private  List<JSONObject> getTables(String schema){List<JSONObject> list = new ArrayList<>();Connection connection = null;PreparedStatement preparedStatement = null;ResultSet resultSet = null;try {//加载数据库驱动Class.forName("com.mysql.jdbc.Driver");//通过驱动管理类获取数据库链接connection =  DriverManager.getConnection(driverUrl, username, password);//定义sql语句 ?表示占位符StringBuffer sql = new StringBuffer();sql.append("select TABLE_NAME,TABLE_COMMENT from information_schema.tables where table_schema= ? ");if(null != notLike){sql.append(" AND table_name NOT LIKE "+notLike);}if(null != notTbales){sql.append(" AND table_name NOT IN ("+notTbales+")");}//获取预处理statementpreparedStatement = connection.prepareStatement(sql.toString());//设置参数,第一个参数为sql语句中参数的序号(从1开始),第二个参数为设置的参数值preparedStatement.setString(1, schema);//向数据库发出sql执行查询,查询出结果集resultSet =  preparedStatement.executeQuery();//遍历查询结果集while(resultSet.next()){JSONObject j = new JSONObject();j.put("name", resultSet.getString("TABLE_NAME"));j.put("remark", resultSet.getString("TABLE_COMMENT"));list.add(j);}} catch (Exception e) {e.printStackTrace();}finally{//释放资源if(resultSet!=null){try {resultSet.close();} catch (SQLException e) {e.printStackTrace();}}if(preparedStatement!=null){try {preparedStatement.close();} catch (SQLException e) {e.printStackTrace();}}if(connection!=null){try {connection.close();} catch (SQLException e) {e.printStackTrace();}}}return list;}private static void addTable(XWPFDocument document,String tableName,String remark, List<String[]> columns){//两个表格之间加个换行document.createParagraph().createRun().setText("\r");// 标题1,1级大纲document.createParagraph().createRun().setText(remark+" "+tableName);//工作经历表格XWPFTable ComTable = document.createTable();
//        //列宽自动分割
//        CTTblWidth comTableWidth = ComTable.getCTTbl().addNewTblPr().addNewTblW();
//        comTableWidth.setType(STTblWidth.DXA);
//        comTableWidth.setW(BigInteger.valueOf(9072));CTTbl ttbl = ComTable.getCTTbl();int[] COLUMN_WIDTHS = new int[] {572,2072,1372,872,672,672,2572};CTTblGrid tblGrid = ttbl.getTblGrid() != null ? ttbl.getTblGrid(): ttbl.addNewTblGrid();for (int j = 0, len = COLUMN_WIDTHS.length; j < len; j++) {CTTblGridCol gridCol = tblGrid.addNewGridCol();gridCol.setW(new BigInteger(String.valueOf(COLUMN_WIDTHS[j])));}//表格第一行XWPFTableRow comTableRowOne = ComTable.getRow(0);setCellvalue(comTableRowOne.getCell(0), "序号");setCellvalue(comTableRowOne.addNewTableCell(),"字段名");setCellvalue(comTableRowOne.addNewTableCell(),"类型");setCellvalue(comTableRowOne.addNewTableCell(),"默认值");setCellvalue(comTableRowOne.addNewTableCell(),"是否可为空");setCellvalue(comTableRowOne.addNewTableCell(),"是否主键");setCellvalue(comTableRowOne.addNewTableCell(),"注释");for (String[] str : columns) {//表格第二行XWPFTableRow comTableRowTwo = ComTable.createRow();for (int j = 0; j < str.length; j++) {if(j==0 || j==3 || j==4 || j==5){setCellvalue(comTableRowTwo.getCell(j),str[j]);}else{comTableRowTwo.getCell(j).setText(str[j]);}}}}private static void setCellvalue(XWPFTableCell cell, String text){cell.setText(text);//垂直居中cell.setVerticalAlignment(XWPFTableCell.XWPFVertAlign.CENTER);CTTc cttc = cell.getCTTc();CTP ctp = cttc.getPList().get(0);CTPPr ctppr = ctp.getPPr();if (ctppr == null) {ctppr = ctp.addNewPPr();}CTJc ctjc = ctppr.getJc();if (ctjc == null) {ctjc = ctppr.addNewJc();}//水平居中ctjc.setVal(STJc.CENTER);}}

参考:poi生成Word数据库设计详细说明书_路途IT的博客-CSDN博客

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

  1. 导出 MySQL 数据库表结构设计文档

    第一种 :利用sql语句查询 需要说明的是该方法应该适用很多工具,博主用的是navicat SELECT TABLE_NAME 表名,COLUMN_NAME 列名, COLUMN_TYPE 数据类型, ...

  2. 开源数据库表结构文档生成器

    大家好,我是TJ 一个励志推荐10000款开源项目与工具的程序员 TJ君前几天和一个在银行科技部上班的同学聚会,同学跟TJ君吐槽,一些小银行的科技表面看上去专业,实际各种马虎不负责. 打个比方,有一次 ...

  3. 【工具篇】利用DBExportDoc V1.0 For MySQL自动生成数据库表结构文档(转

    对于DBA或开发来说,如何规范化你的数据库表结构文档是灰常之重要的一件事情.但是当你的库,你的表排山倒海滴多的时候,你就会很头疼了. 推荐一款工具DBExportDoc V1.0 For MySQL( ...

  4. Java实现生成数据库表结构文档(生成工具screw的使用)

    目录 一.screw介绍 1.简介 2.特点 3.文档格式 二.生成方式 2.1 方式1:使用 Java 代码 2.1.1 引入依赖 2.1.2 编写代码 2.1.3 测试 2.2 方式2:使用 Sp ...

  5. 使用Navicat 导出 MySQL 数据库表结构、表数据到Excel表格中

    文章目录 1 摘要 2 数据导出 2.1 导出数据库表结构至Excel 2.2 导出数据库表结构为 SQL 2.3 导出数据库表数据至Excel 3 推荐参考资料 1 摘要 在编写项目设计文档的时候, ...

  6. powerdesigner导出mysql数据库表结构到Word

    powerdesigner导出mysql数据库表结构到Word 需求场景 将SQL导入PowerDesigner中生成模型 创建导出的word模版 需求场景 将数据库表导结构出为word文档: 将SQ ...

  7. 简洁好用的数据库表结构文档生成工具!

    在企业级开发中.我们经常会有编写数据库表结构文档的时间付出,从业以来,待过几家企业,关于数据库表结构文档状态:要么没有.要么有.但都是手写.后期运维开发,需要手动进行维护到文档中,很是繁琐.如果忘记一 ...

  8. mysql数据库结构导出word_Windows导出MySQL数据库表结构到Word文档-DBExportDoc V1.0 For MySQL...

    必要条件: 1.Microsoft Office Word(我用WPS不行) 2.mysql-connector-odbc 3.会看文档 下载地址:关注微信公众号:八四七,回复5获取,压缩包中包含有具 ...

  9. powerdesigner导出mysql数据库表结构到Excel

    前提 要做数据源的整理,需要将Mysql数据库表的结构导出到Excel表里面做文档记录; 第一个Sheet是所有表格的列表,其他的Sheet是每一个表格的详细字段以及注释说明. 打开PowerDesi ...

最新文章

  1. Codeforces Round #665 (Div. 2) Maximum Distributed Tree(树上贪心)
  2. jQuery插件开发--(转)
  3. zerodivisionerror什么意思python-Python中%的结果是什么?
  4. mysql 实时血备份_windows下设置自动备份 mysql 批处理
  5. 诺奖得主:中国机制促成抗疫成功经济复苏
  6. DesignPattern_Java:Adapter Pattern
  7. 哈工大SCIR lab带你从头开始了解Transformer
  8. WPF Ribbon 开发资料分享
  9. 禁止cmd dos 窗口被关闭
  10. GAN变种介绍 - DCGAN、InfoGAN、CycleGAN、WGAN、Self-Attention GAN、BigGAN
  11. Testbed单元测试
  12. 【软件推荐】还用着Windows自带的看图软件吗?
  13. 一款好看的 VSCode 代码主题和图标主题
  14. 日行一善的100种方式
  15. USACO 2021 December Contest, Bronze
  16. 一次LoadLibrary调用失败的调试经历
  17. NVIDIA 460.79版显卡驱动发布:全力优化《赛博朋克2077》
  18. Python(1-10章)知识点
  19. 关于GPS 坐标系的那些事
  20. python:彩色照转黑白照

热门文章

  1. python小程序源代码_【程序源代码】微信商城小程序
  2. 从四大造字法看文字所承载的文化_对央视“汉字的魅力”讲授之管见(《天津教育报》2012年6月15日)...
  3. 花书+吴恩达深度学习(二)非线性激活函数(ReLU, maxout, sigmoid, tanh)
  4. [PHP] 算法-邻接矩阵图的广度和深度优先遍历的PHP实现
  5. Python2解决的中文乱码问题
  6. linux可配置哪些服务,不可不知 十大热门Linux服务器配置
  7. JAVA中如何交换两个List集合的顺序呢?
  8. java todo error_运行我的第一个Java应用程序出错
  9. 3.7 ExtJS RadioGroup(单选按钮组) 使用及注意事项
  10. CXF 生成Web Service Client(将WSDl 转化成 Java代码)