• oracle数据库自动生成数据库表结构文档(亲测有效)


      1  2 
      3 import java.awt.Color;
      4 import java.io.FileOutputStream;
      5 import java.sql.Connection;
      6 import java.sql.DriverManager;
      7 import java.sql.ResultSet;
      8 import java.sql.SQLException;
      9 import java.sql.Statement;
     10 import java.util.ArrayList;
     11 import java.util.HashMap;
     12 import java.util.Iterator;
     13 import java.util.List;
     14 import java.util.Map;
     15 
     16 import com.lowagie.text.*;
     17 import com.lowagie.text.rtf.RtfWriter2;
     18 /**
     19  * 数据库文档生成器 Oracle版
     20  * itext-2.1.7.jar
     21  * itext-rtf-2.1.7.jar
     22  * @author cuiyj
     23  *
     24  */
     25 public class GenerateTableDoc {
     26     //键类型字典
     27     private static Map<String,String> keyType = new HashMap<String,String>();
     28     //需要导出的目标表
     29     private static List<String> targetTable = new ArrayList<String>();
     30     static{
     31         targetTable.add("COMMON_ADDRESS");//表名
     32         targetTable.add("L_USER");
     33     }
     34     //初始化jdbc
     35     static{
     36         try {
     37             keyType.put("ID", "主键");
     38 //            keyType.put("C", "Check");
     39             Class.forName("oracle.jdbc.OracleDriver");
     40         } catch (ClassNotFoundException e) {
     41             e.printStackTrace();
     42         }
     43     }
     44     //private static String url = "";//链接url
     45     private static String url = "jdbc:oracle:thin:@127.0.0.1:1521:orcl";//链接url
     46     private static String username = "user"; //用户名.需要设置默认表空间哈
     47     private static String password = "user"; //密码
     48     private static String schema = "USER"; //目标数据库名
     49     //查询所有表的sql语句
     50     private static String sql_get_all_tables = "select a.TABLE_NAME,b.COMMENTS from user_tables a,user_tab_comments b WHERE a.TABLE_NAME=b.TABLE_NAME order by TABLE_NAME";    //查询所有字段的sql语句
     51     private static String sql_get_all_columns = "select T1.column_name,T1.data_type,T1.data_length,t2.comments,T1.NULLABLE,(select max(constraint_type)    from user_constraints x left join user_cons_columns y on x.constraint_name=y.constraint_name where x.table_name=t1.TABLE_NAME and y.COLUMN_NAME=T1.column_name)  from user_tab_cols t1, user_col_comments t2, user_tab_comments t3  where t1.TABLE_NAME=t2.table_name(+)  and t1.COLUMN_NAME=t2.column_name(+)  and t1.TABLE_NAME=t3.table_name(+)  and t1.TABLE_NAME='{table_name}' order by T1.COLUMN_ID ";
     52     public static void main(String[] args) throws Exception {
     53         //初始化word文档
     54         Document document = new Document(PageSize.A4);
     55         RtfWriter2.getInstance(document,new FileOutputStream("E:/word.doc"));
     56         document.open();
     57         //查询开始
     58         Connection conn = getConnection();
     59         //获取所有表
     60         List tables = getDataBySQL(sql_get_all_tables,conn);
     61         int i=1;
     62         for (Iterator iterator = tables.iterator(); iterator.hasNext();) {
     63             String [] arr = (String []) iterator.next();
     64             //循环获取字段信息
     65             String tableName = arr[0];
     66             if(targetTable.contains(tableName)){
     67                 System.out.print(i+".正在处理数据表-----------"+arr[0]);
     68                 addTableMetaData(document,arr,i);
     69                 List columns = getDataBySQL(sql_get_all_columns.replace("{table_name}", arr[0]),conn);
     70                 addTableDetail(document,columns);
     71                 addBlank(document);
     72                 System.out.println("...done");
     73                 i++;
     74             }
     75         }
     76         document.close();
     77         conn.close();
     78     }
     79     /**
     80      * 添加一个空行
     81      * @param document
     82      * @throws Exception
     83      */
     84     public static void addBlank(Document document)throws Exception{
     85         Paragraph ph = new Paragraph("");
     86         ph.setAlignment(Paragraph.ALIGN_LEFT);
     87         document.add(ph);
     88     }
     89     /**
     90      * 添加包含字段详细信息的表格
     91      * @param document
     92      * @param arr1
     93      * @param columns
     94      * @throws Exception
     95      */
     96     public static void addTableDetail(Document document,List columns)throws Exception{
     97         Table table = new Table(6);
     98         table.setWidth(100f);
     99         table.setBorderWidth(1);
    100         table.setBorderColor(Color.BLACK);
    101         table.setPadding(0);
    102         table.setSpacing(0);
    103         Cell cell1 = new Cell("序号");// 单元格
    104         cell1.setHeader(true);
    105 
    106         Cell cell2 = new Cell("列名");// 单元格
    107         cell2.setHeader(true);
    108 
    109         Cell cell3 = new Cell("类型");// 单元格
    110         cell3.setHeader(true);
    111 
    112         Cell cell4 = new Cell("长度");// 单元格
    113         cell4.setHeader(true);
    114 
    115         Cell cell5 = new Cell("键");// 单元格
    116         cell5.setHeader(true);
    117 
    118         Cell cell6 = new Cell("说明");// 单元格
    119         cell6.setHeader(true);
    120         //设置表头格式
    121         table.setWidths(new float[]{8f,30f,15f,8f,10f,29f});
    122         cell1.setHorizontalAlignment(Cell.ALIGN_CENTER);
    123         cell1.setBackgroundColor(Color.gray);
    124         cell2.setHorizontalAlignment(Cell.ALIGN_CENTER);
    125         cell2.setBackgroundColor(Color.gray);
    126         cell3.setHorizontalAlignment(Cell.ALIGN_CENTER);
    127         cell3.setBackgroundColor(Color.gray);
    128         cell4.setHorizontalAlignment(Cell.ALIGN_CENTER);
    129         cell4.setBackgroundColor(Color.gray);
    130         cell5.setHorizontalAlignment(Cell.ALIGN_CENTER);
    131         cell5.setBackgroundColor(Color.gray);
    132         cell6.setHorizontalAlignment(Cell.ALIGN_CENTER);
    133         cell6.setBackgroundColor(Color.gray);
    134         table.addCell(cell1);
    135         table.addCell(cell2);
    136         table.addCell(cell3);
    137         table.addCell(cell4);
    138         table.addCell(cell5);
    139         table.addCell(cell6);
    140         table.endHeaders();// 表头结束
    141         int x = 1;
    142         for (Iterator iterator = columns.iterator(); iterator.hasNext();) {
    143             String [] arr2 = (String []) iterator.next();
    144             Cell c1 = new Cell(x+"");
    145             Cell c2 = new Cell(arr2[0]);
    146             Cell c3 = new Cell(arr2[1]);
    147             Cell c4 = new Cell(arr2[2]);
    148 
    149             String key = keyType.get(arr2[5]);
    150             if(key==null)key = "";
    151             Cell c5 = new Cell(key);
    152             Cell c6 = new Cell(arr2[3]);
    153             c1.setHorizontalAlignment(Cell.ALIGN_CENTER);
    154             c2.setHorizontalAlignment(Cell.ALIGN_CENTER);
    155             c3.setHorizontalAlignment(Cell.ALIGN_CENTER);
    156             c4.setHorizontalAlignment(Cell.ALIGN_CENTER);
    157             c5.setHorizontalAlignment(Cell.ALIGN_CENTER);
    158             c6.setHorizontalAlignment(Cell.ALIGN_CENTER);
    159             table.addCell(c1);
    160             table.addCell(c2);
    161             table.addCell(c3);
    162             table.addCell(c4);
    163             table.addCell(c5);
    164             table.addCell(c6);
    165             x++;
    166         }
    167         document.add(table);
    168     }
    169     /**
    170      * 增加表概要信息
    171      * @param dcument
    172      * @param arr
    173      * @param i
    174      * @throws Exception
    175      */
    176     public static void addTableMetaData(Document dcument,String [] arr,int i) throws Exception{
    177         Paragraph ph = new Paragraph(i+". 表名: "+arr[0]+"        说明: "+(arr[1]==null?"":arr[1]));
    178         ph.setAlignment(Paragraph.ALIGN_LEFT);
    179         dcument.add(ph);
    180     }
    181     /**
    182      * 把SQL语句查询出列表
    183      * @param sql
    184      * @param conn
    185      * @return
    186      */
    187     public static List getDataBySQL(String sql,Connection conn){
    188         Statement stmt = null;
    189         ResultSet rs = null;
    190         List list = new ArrayList();
    191         try {
    192             stmt = conn.createStatement();
    193             rs = stmt.executeQuery(sql);
    194             while(rs.next()){
    195                 String [] arr = new String[rs.getMetaData().getColumnCount()];
    196                 for(int i=0;i<arr.length;i++){
    197                     arr[i] = rs.getString(i+1);
    198                 }
    199                 list.add(arr);
    200             }
    201         } catch (SQLException e) {
    202             e.printStackTrace();
    203         }finally{
    204             try {
    205                 if(rs!=null)rs.close();
    206                 if(stmt!=null)stmt.close();
    207             } catch (SQLException e) {
    208                 e.printStackTrace();
    209             }
    210         }
    211         return list;
    212     }
    213     /**
    214      * 获取数据库连接
    215      * @return
    216      */
    217     public static Connection getConnection(){
    218         try {
    219             return DriverManager.getConnection(url, username, password);
    220         } catch (SQLException e) {
    221             e.printStackTrace();
    222         }
    223         return null;
    224     }
    225 }

     1 ------ 这是相关依赖      
     2         <dependency>
     3             <groupId>com.lowagie</groupId>
     4             <artifactId>itext</artifactId>
     5             <version>2.1.7</version>
     6         </dependency>
     7         <dependency>
     8             <groupId>com.lowagie</groupId>
     9             <artifactId>itext-rtf</artifactId>
    10             <version>2.1.7</version>
    11         </dependency>
  • 相关阅读:
    RDIFramework.NET开发实例━表约束条件权限的使用-WinForm
    RDIFramework.NET V2.8版本 ━ 开发实例之产品管理(WinForm)
    RDIFramework.NET ━ Web中打印的各种方案参考-欢迎补充
    RDIFramework.NET 框架兼容各种数据库类型事务使用范例参考
    【干货】再上数据分页控件 ━ 更加灵活,更加实用-提供源码
    RDIFramework.NET ━ .NET快速信息化系统开发框架 V2.8 版本━新增岗位管理-Web部分
    RDIFramework.NET ━ .NET快速信息化系统开发框架 V2.8 版本━新增岗位管理-WinForm部分
    RDIFramework.NET ━ .NET快速信息化系统开发框架 V2.8 版本发布
    Javascript中的apply与call详解
    Javascript定义类(class)的三种方法
  • 原文地址:https://www.cnblogs.com/ysyy/p/11858014.html
Copyright © 2020-2023  润新知