package com.mes.tools; /** * @Author : zhoush * @Date: 2024/3/26 8:16 * @Description: */ import com.alibaba.fastjson.JSONObject; 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 java.io.FileOutputStream; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.text.SimpleDateFormat; import java.util.*; /** * @Method: 数据库表结构word导出 * @Description: 数据库表结构word导出 **/ public class ExportToWord { // private final String DRIVER = "com.mysql.jdbc.Driver"; //MySQL5.0 private final String DRIVER = "com.mysql.cj.jdbc.Driver"; private final String URL = "jdbc:mysql://10.153.19.150:3306/hangzhoumes"+"?serverTimezone=GMT%2B8"; //数据库账号 private final String USER_NAME = "root"; //数据库密码 private final String PASS_WORD = "beibo.123/"; //对应数据库 此处是你本地对应的数据库名称 private final String database = "hangzhoumes"; //对应输出地址 private final String reportPath = "E:\\项目\\项目文档\\杭州利来\\"; // 启动方法 public static void main(String[] args) { try { ExportToWord rd = new ExportToWord (); rd.report(); }catch (Exception e){ System.out.println("异常:自行处理或者联系我都阔以."); e.printStackTrace(); } } Connection conn = null; PreparedStatement pst = null; ResultSet rs = null; // 获取查询数据 public Map> getData() throws Exception{ System.out.println("数据生成中,请稍等..."); Map> map = new HashMap<>(); List tables = getTables(database); for (Table table : tables) { List columns = getColumns(database,table.getTableName()); map.put(table.getTableName(),columns); } return map; } // 获取表字段信息 public List getColumns(String database,String tableName) throws Exception{ String sql = "select column_name,column_comment,column_type,is_nullable, column_key from information_schema.columns where table_schema=? and table_name=? ";// group by column_name ResultSet rs = getConn(database,tableName,sql); List tableColumns = new ArrayList<>(); while (rs.next()){ TableColumn tc = new TableColumn(); tc.setTableName(tableName); tc.setColumnName(rs.getString("column_name")); tc.setColumnType(rs.getString("column_type")); tc.setColumnKey(rs.getString("column_key")); tc.setIsNullable(rs.getString("is_nullable")); tc.setColumnComment(rs.getString("column_comment")); tableColumns.add(tc); } releaseConn(); return tableColumns; } // 获取所有表 public List
getTables(String database) throws Exception{ String sql = "select table_name,table_comment from information_schema.tables where table_schema=?"; ResultSet rs = getConn(database, "",sql); List
tables = new ArrayList<>(); while(rs.next()){ Table table = new Table(); table.setTableName(rs.getString( "table_name")); table.setTableCommont(rs.getString("table_comment")); tables.add(table); } releaseConn(); return tables; } // 连接数据库 private ResultSet getConn(String dataBase,String tableName,String sql){ try{ Class.forName(DRIVER); conn = DriverManager.getConnection(URL,USER_NAME,PASS_WORD); pst = conn.prepareStatement(sql); pst.setString(1,dataBase); if(!"".equals(tableName)){ pst.setString(2,tableName); } rs = pst.executeQuery(); return rs; }catch (Exception e){ e.printStackTrace(); } return null; } // 释放连接 private void releaseConn(){ try{ if(rs != null ){ rs.close(); } if(pst != null){ pst.close(); } if(conn != null){ conn.close(); } }catch (Exception e){ e.printStackTrace(); } } // 导出数据 public void report() throws Exception{ Map> data = this.getData(); // 表名:表体 List
tables = this.getTables(this.database); // 表体(列名、类型、注释) Map tableMap = new HashMap<>(); // 表名:中文名 JSONObject json = new JSONObject((HashMap)data); for (Table table : tables) { tableMap.put(table.getTableName(),table.getTableCommont()); } // 构建表格数据 XWPFDocument document = new XWPFDocument(); Integer i = 1; for (String tableName : data.keySet()) { XWPFParagraph paragraph = document.createParagraph(); // 创建标题对象 XWPFRun run = paragraph.createRun(); // 创建文本对象 run.setText((i+"、"+tableName+" "+tableMap.get(tableName))); // 标题名称 run.setFontSize(14); // 字体大小 run.setBold(true); // 字体加粗 int j = 0; XWPFTable table = document.createTable(data.get(tableName).size()+1,5); // 第一行 table.setCellMargins(50,400,50,400); table.getRow(j).getCell(0).setText("字段名称"); table.getRow(j).getCell(1).setText("字段类型"); table.getRow(j).getCell(2).setText("约束"); table.getRow(j).getCell(3).setText("为空"); table.getRow(j).getCell(4).setText("字段含义"); j++; for (TableColumn tableColumn : data.get(tableName)) { table.getRow(j).getCell(0).setText(tableColumn.getColumnName()); table.getRow(j).getCell(1).setText(tableColumn.getColumnType()); table.getRow(j).getCell(2).setText(tableColumn.getColumnKey()); table.getRow(j).getCell(3).setText(tableColumn.getIsNullable()); table.getRow(j).getCell(4).setText(tableColumn.getColumnComment()); j++; } i++; } // 文档输出 FileOutputStream out = new FileOutputStream(reportPath + new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()).toString()+"_"+database +".docx"); document.write(out); out.close(); System.out.println("Word生成完成!!!"); } // 表 class Table{ private String tableName; private String tableCommont; public String getTableName() { return tableName; } public void setTableName(String tableName) { this.tableName = tableName; } public String getTableCommont() { return tableCommont; } public void setTableCommont(String tableCommont) { this.tableCommont = tableCommont; } } // 表列信息 class TableColumn{ // 表名 private String tableName; // 字段名 private String columnName; // 字段类型 private String columnType; // 字段注释 private String columnComment; // 可否为空 private String isNullable; // 约束 private String columnKey; public String getTableName() { return tableName; } public void setTableName(String tableName) { this.tableName = tableName; } public String getColumnName() { return columnName; } public void setColumnName(String columnName) { this.columnName = columnName; } public String getColumnType() { return columnType; } public void setColumnType(String columnType) { this.columnType = columnType; } public String getColumnComment() { return columnComment; } public void setColumnComment(String columnComment) { this.columnComment = columnComment; } public String getIsNullable() { return isNullable; } public void setIsNullable(String isNullable) { this.isNullable = isNullable; } public String getColumnKey() { return columnKey; } public void setColumnKey(String columnKey) { this.columnKey = columnKey; } } }