zoukankan      html  css  js  c++  java
  • java基础---->使用Itext生成数据库文档

      这里简单的介绍一下使用Itext生成数据库表的文档。于是我们领教了世界是何等凶顽,同时又得知世界也可以变得温存和美好。

    生成数据库的文档

    一、maven项目需要引入的jar依赖

    <dependency>
        <groupId>com.lowagie</groupId>
        <artifactId>itext</artifactId>
        <version>2.1.7</version>
    </dependency>
    
    <dependency>
        <groupId>com.lowagie</groupId>
        <artifactId>itext-rtf</artifactId>
        <version>2.1.7</version>
    </dependency>
    
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>${mysql-version}</version>
    </dependency>

    二、生成文档的java类,文档的说明部分,需要表的注释和列的注释

    package com.generateDocs;
    
    import java.awt.Color;
    import java.io.FileOutputStream;
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.Iterator;
    import java.util.List;
    import java.util.Map;
    
    import com.lowagie.text.Cell;
    import com.lowagie.text.Document;
    import com.lowagie.text.PageSize;
    import com.lowagie.text.Paragraph;
    import com.lowagie.text.Table;
    import com.lowagie.text.rtf.RtfWriter2;
    
    /**
     * 数据字典生成器 Mysql
     *
     * @Author: huhx
     * @Date: 2017-10-12 下午 4:36
     */
    public class MysqlDocsGenerate {
    
        //键类型字典
        private static Map<String, String> keyType = new HashMap<String, String>();
    
        //初始化jdbc
        static {
            try {
                keyType.put("PRI", "主键");
                keyType.put("UNI", "唯一键");
                Class.forName("com.mysql.jdbc.Driver");
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            }
        }
    
        private static String url = "jdbc:mysql://127.0.0.1:3306/cmb";//链接url
        private static String username = "root"; //用户名
        private static String password = "****"; //密码
        private static String schema = "****"; //目标数据库 名
        //查询所有表的sql语句
        private static String sql_get_all_tables = "select table_name,TABLE_COMMENT from INFORMATION_SCHEMA.tables where TABLE_SCHEMA='" + schema + "' and TABLE_TYPE='BASE TABLE'";
        //查询所有字段的sql语句
        private static String sql_get_all_columns = "select column_name,data_type,CHARACTER_MAXIMUM_LENGTH,COLUMN_COMMENT,is_nullable,COLUMN_key from information_schema.`COLUMNS` where TABLE_NAME='{table_name}' and TABLE_SCHEMA='" + schema + "'";
    
        public static void main(String[] args) throws Exception {
            //初始化word文档
            Document document = new Document(PageSize.A4);
            RtfWriter2.getInstance(document, new FileOutputStream("D:/word.doc"));
            document.open();
            //查询开始
            Connection conn = getConnection();
            //获取所有表
            List tables = getDataBySQL(sql_get_all_tables, conn);
            int i = 1;
            for (Iterator iterator = tables.iterator(); iterator.hasNext(); ) {
                String[] arr = (String[]) iterator.next();
                //循环获取字段信息
                System.out.print(i + ".正在处理数据表-----------" + arr[0]);
                addTableMetaData(document, arr, i);
                List columns = getDataBySQL(sql_get_all_columns.replace("{table_name}", arr[0]), conn);
                addTableDetail(document, columns);
                addBlank(document);
                System.out.println("...done");
                i++;
            }
            document.close();
            conn.close();
        }
    
        /**
         * 添加一个空行
         *
         * @param document
         * @throws Exception
         */
        public static void addBlank(Document document) throws Exception {
            Paragraph ph = new Paragraph("");
            ph.setAlignment(Paragraph.ALIGN_LEFT);
            document.add(ph);
        }
    
        /**
         * 添加包含字段详细信息的表格
         *
         * @param document
         * @param columns
         * @throws Exception
         */
        public static void addTableDetail(Document document, List columns) throws Exception {
            Table table = new Table(6);
            table.setWidth(100f);//表格 宽度100%
            table.setBorderWidth(1);
            table.setBorderColor(Color.BLACK);
            table.setPadding(0);
            table.setSpacing(0);
            Cell cell1 = new Cell("序号");// 单元格
            cell1.setHeader(true);
    
            Cell cell2 = new Cell("列名");// 单元格
            cell2.setHeader(true);
    
            Cell cell3 = new Cell("类型");// 单元格
            cell3.setHeader(true);
    
            Cell cell4 = new Cell("长度");// 单元格
            cell4.setHeader(true);
    
            Cell cell5 = new Cell("键");// 单元格
            cell5.setHeader(true);
    
            Cell cell6 = new Cell("说明");// 单元格
            cell6.setHeader(true);
            //设置表头格式
            table.setWidths(new float[]{8f, 30f, 15f, 8f, 10f, 29f});
            cell1.setHorizontalAlignment(Cell.ALIGN_CENTER);
            cell1.setBackgroundColor(Color.gray);
            cell2.setHorizontalAlignment(Cell.ALIGN_CENTER);
            cell2.setBackgroundColor(Color.gray);
            cell3.setHorizontalAlignment(Cell.ALIGN_CENTER);
            cell3.setBackgroundColor(Color.gray);
            cell4.setHorizontalAlignment(Cell.ALIGN_CENTER);
            cell4.setBackgroundColor(Color.gray);
            cell5.setHorizontalAlignment(Cell.ALIGN_CENTER);
            cell5.setBackgroundColor(Color.gray);
            cell6.setHorizontalAlignment(Cell.ALIGN_CENTER);
            cell6.setBackgroundColor(Color.gray);
            table.addCell(cell1);
            table.addCell(cell2);
            table.addCell(cell3);
            table.addCell(cell4);
            table.addCell(cell5);
            table.addCell(cell6);
            table.endHeaders();// 表头结束
            int x = 1;
            for (Iterator iterator = columns.iterator(); iterator.hasNext(); ) {
                String[] arr2 = (String[]) iterator.next();
                Cell c1 = new Cell(x + "");
                Cell c2 = new Cell(arr2[0]);
                Cell c3 = new Cell(arr2[1]);
                Cell c4 = new Cell(arr2[2]);
    
                String key = keyType.get(arr2[5]);
                if (key == null) key = "";
                Cell c5 = new Cell(key);
                Cell c6 = new Cell(arr2[3]);
                c1.setHorizontalAlignment(Cell.ALIGN_CENTER);
                c2.setHorizontalAlignment(Cell.ALIGN_CENTER);
                c3.setHorizontalAlignment(Cell.ALIGN_CENTER);
                c4.setHorizontalAlignment(Cell.ALIGN_CENTER);
                c5.setHorizontalAlignment(Cell.ALIGN_CENTER);
                c6.setHorizontalAlignment(Cell.ALIGN_CENTER);
                table.addCell(c1);
                table.addCell(c2);
                table.addCell(c3);
                table.addCell(c4);
                table.addCell(c5);
                table.addCell(c6);
                x++;
            }
            document.add(table);
        }
    
        /**
         * 增加表概要信息
         *
         * @param dcument
         * @param arr
         * @param i
         * @throws Exception
         */
        public static void addTableMetaData(Document dcument, String[] arr, int i) throws Exception {
            Paragraph ph = new Paragraph(i + ". 表名: " + arr[0] + "        说明: " + (arr[1] == null ? "" : arr[1]));
            ph.setAlignment(Paragraph.ALIGN_LEFT);
            dcument.add(ph);
        }
    
        /**
         * 把SQL语句查询出列表
         *
         * @param sql
         * @param conn
         * @return
         */
        public static List getDataBySQL(String sql, Connection conn) {
            Statement stmt = null;
            ResultSet rs = null;
            List list = new ArrayList();
            try {
                stmt = conn.createStatement();
                rs = stmt.executeQuery(sql);
                while (rs.next()) {
                    String[] arr = new String[rs.getMetaData().getColumnCount()];
                    for (int i = 0; i < arr.length; i++) {
                        arr[i] = rs.getString(i + 1);
                    }
                    list.add(arr);
                }
            } catch (SQLException e) {
                e.printStackTrace();
            } finally {
                try {
                    if (rs != null) rs.close();
                    if (stmt != null) stmt.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            return list;
        }
    
        /**
         * 获取数据库连接
         *
         * @return
         */
        public static Connection getConnection() {
            try {
                return DriverManager.getConnection(url, username, password);
            } catch (SQLException e) {
                e.printStackTrace();
            }
            return null;
        }
    }
    mysql

    三、生成的文档大致如下截图

    四、以下是oracle版本的代码

    package com.generateDocs;
    
    import com.lowagie.text.*;
    import com.lowagie.text.rtf.RtfWriter2;
    
    import java.awt.*;
    import java.io.FileOutputStream;
    import java.sql.*;
    import java.util.*;
    import java.util.List;
    
    /**
     * 数据字典生成器 oracle
     *
     * @Author: huhx
     * @Date: 2017-10-12 下午 4:36
     */
    public class OracleDocsGenerate {
    
        //键类型字典
        private static Map<String, String> keyType = new HashMap<String, String>();
    
        //初始化jdbc
        static {
            try {
                keyType.put("PRI", "主键");
                keyType.put("UNI", "唯一键");
                Class.forName("com.mysql.jdbc.Driver");
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            }
        }
    
        private static String url = "jdbc:oracle:thin:@172.16.251.190:1521/orcl";//链接url
        private static String username = "imp"; //用户名
        private static String password = "imp"; //密码
        //查询所有表的sql语句
        private static String sql_get_all_tables = "select TABLE_NAME, COMMENTS as TABLE_COMMENT from user_tab_comments";
        //查询所有字段的sql语句
        private static String sql_get_all_columns = "select a.COLUMN_NAME, a.DATA_TYPE, a.DATA_LENGTH as CHARACTER_MAXIMUM_LENGTH, d.COMMENTS as COLUMN_COMMENT,a.NULLABLE as is_nullable, case when  a.COLUMN_NAME in (select cu.column_name from user_cons_columns cu, user_constraints au where cu.constraint_name = au.constraint_name and au.constraint_type = 'P') then 'PRI' end as COLUMN_key from USER_TAB_COLUMNS a, user_col_comments b, USER_TABLES c , user_col_comments d where c.TABLE_NAME = a.TABLE_NAME and c.TABLE_NAME = b.table_name and a.COLUMN_NAME = b.COLUMN_NAME and d.table_name = a.table_name and d.column_name = a.column_name and a.TABLE_NAME='{table_name}'";
    
        public static void main(String[] args) throws Exception {
            //初始化word文档
            Document document = new Document(PageSize.A4);
            RtfWriter2.getInstance(document, new FileOutputStream("D:/word_oracle.doc"));
            document.open();
            //查询开始
            Connection conn = getConnection();
            //获取所有表
            List tables = getDataBySQL(sql_get_all_tables, conn);
            int i = 1;
            for (Iterator iterator = tables.iterator(); iterator.hasNext(); ) {
                String[] arr = (String[]) iterator.next();
                //循环获取字段信息
                System.out.print(i + ".正在处理数据表-----------" + arr[0]);
                addTableMetaData(document, arr, i);
                List columns = getDataBySQL(sql_get_all_columns.replace("{table_name}", arr[0]), conn);
                addTableDetail(document, columns);
                addBlank(document);
                System.out.println("...done");
                i++;
            }
            document.close();
            conn.close();
        }
    
        /**
         * 添加一个空行
         *
         * @param document
         * @throws Exception
         */
        public static void addBlank(Document document) throws Exception {
            Paragraph ph = new Paragraph("");
            ph.setAlignment(Paragraph.ALIGN_LEFT);
            document.add(ph);
        }
    
        /**
         * 添加包含字段详细信息的表格
         *
         * @param document
         * @param columns
         * @throws Exception
         */
        public static void addTableDetail(Document document, List columns) throws Exception {
            Table table = new Table(6);
            table.setWidth(100f);//表格 宽度100%
            table.setBorderWidth(1);
            table.setBorderColor(Color.BLACK);
            table.setPadding(0);
            table.setSpacing(0);
            Cell cell1 = new Cell("序号");// 单元格
            cell1.setHeader(true);
    
            Cell cell2 = new Cell("列名");// 单元格
            cell2.setHeader(true);
    
            Cell cell3 = new Cell("类型");// 单元格
            cell3.setHeader(true);
    
            Cell cell4 = new Cell("长度");// 单元格
            cell4.setHeader(true);
    
            Cell cell5 = new Cell("键");// 单元格
            cell5.setHeader(true);
    
            Cell cell6 = new Cell("说明");// 单元格
            cell6.setHeader(true);
            //设置表头格式
            table.setWidths(new float[]{8f, 30f, 15f, 8f, 10f, 29f});
            cell1.setHorizontalAlignment(Cell.ALIGN_CENTER);
            cell1.setBackgroundColor(Color.gray);
            cell2.setHorizontalAlignment(Cell.ALIGN_CENTER);
            cell2.setBackgroundColor(Color.gray);
            cell3.setHorizontalAlignment(Cell.ALIGN_CENTER);
            cell3.setBackgroundColor(Color.gray);
            cell4.setHorizontalAlignment(Cell.ALIGN_CENTER);
            cell4.setBackgroundColor(Color.gray);
            cell5.setHorizontalAlignment(Cell.ALIGN_CENTER);
            cell5.setBackgroundColor(Color.gray);
            cell6.setHorizontalAlignment(Cell.ALIGN_CENTER);
            cell6.setBackgroundColor(Color.gray);
            table.addCell(cell1);
            table.addCell(cell2);
            table.addCell(cell3);
            table.addCell(cell4);
            table.addCell(cell5);
            table.addCell(cell6);
            table.endHeaders();// 表头结束
            int x = 1;
            for (Iterator iterator = columns.iterator(); iterator.hasNext(); ) {
                String[] arr2 = (String[]) iterator.next();
                Cell c1 = new Cell(x + "");
                Cell c2 = new Cell(arr2[0]);
                Cell c3 = new Cell(arr2[1]);
                Cell c4 = new Cell(arr2[2]);
    
                String key = keyType.get(arr2[5]);
                if (key == null) key = "";
                Cell c5 = new Cell(key);
                Cell c6 = new Cell(arr2[3]);
                c1.setHorizontalAlignment(Cell.ALIGN_CENTER);
                c2.setHorizontalAlignment(Cell.ALIGN_CENTER);
                c3.setHorizontalAlignment(Cell.ALIGN_CENTER);
                c4.setHorizontalAlignment(Cell.ALIGN_CENTER);
                c5.setHorizontalAlignment(Cell.ALIGN_CENTER);
                c6.setHorizontalAlignment(Cell.ALIGN_CENTER);
                table.addCell(c1);
                table.addCell(c2);
                table.addCell(c3);
                table.addCell(c4);
                table.addCell(c5);
                table.addCell(c6);
                x++;
            }
            document.add(table);
        }
    
        /**
         * 增加表概要信息
         *
         * @param dcument
         * @param arr
         * @param i
         * @throws Exception
         */
        public static void addTableMetaData(Document dcument, String[] arr, int i) throws Exception {
            Paragraph ph = new Paragraph(i + ". 表名: " + arr[0] + "        说明: " + (arr[1] == null ? "" : arr[1]));
            ph.setAlignment(Paragraph.ALIGN_LEFT);
            dcument.add(ph);
        }
    
        /**
         * 把SQL语句查询出列表
         *
         * @param sql
         * @param conn
         * @return
         */
        public static List getDataBySQL(String sql, Connection conn) {
            Statement stmt = null;
            ResultSet rs = null;
            List list = new ArrayList();
            try {
                stmt = conn.createStatement();
                rs = stmt.executeQuery(sql);
                while (rs.next()) {
                    String[] arr = new String[rs.getMetaData().getColumnCount()];
                    for (int i = 0; i < arr.length; i++) {
                        arr[i] = rs.getString(i + 1);
                    }
                    list.add(arr);
                }
            } catch (SQLException e) {
                e.printStackTrace();
            } finally {
                try {
                    if (rs != null) rs.close();
                    if (stmt != null) stmt.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            return list;
        }
    
        /**
         * 获取数据库连接
         *
         * @return
         */
        public static Connection getConnection() {
            try {
                return DriverManager.getConnection(url, username, password);
            } catch (SQLException e) {
                e.printStackTrace();
            }
            return null;
        }
    }
    oracle

    友情链接

  • 相关阅读:
    测试服务器centos7安装php7.2+composer
    开发工作流程
    CKEditor4多个span标签不合并的问题
    编程面试题
    vagrant常用命令
    设置apache服务器的访问证书,支持https访问,windows
    PHP5实现foreach语言结构遍历一个类的实例
    virtualbox虚拟机ubuntu操作系统,设置网络互通、访问,能访问虚拟机swoole的http服务
    二进制位运算
    dedecms学习笔记(1)--ShowMsg()
  • 原文地址:https://www.cnblogs.com/huhx/p/baseusejavageneratedocs.html
Copyright © 2011-2022 走看看