oracle資料庫自動生成資料庫表結構文檔(親測有效)

来源:https://www.cnblogs.com/ysyy/archive/2019/11/14/11858014.html
-Advertisement-
Play Games

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.Resul ...


  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>

 

 

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • CREATE TABLE biao( name VARCHAR(20) PRIMARY KEY, age INT(11) NOT NULL, sex CHAR(11)DEFAULT 1, love VARCHAR(11) );Query OK, 0 rows affected 此時name設置了主鍵 ...
  • [TOC] 一,準備環境 基本配置如下: 初始化四台 虛擬機,配置如下: 修改系統時區 為方便使用建議如下配置: 安裝 " " 插件; 設置 行號; 安裝 插件服務; 安裝 插件服務並加以配置,方便文件上傳下載; 在 上安裝 客戶端; 在 上安裝 客戶端。 需要的軟體: 在虛擬機做如下步驟:創建目錄 ...
  • 一.MySQL日誌簡介 二.錯誤日誌 作用: 記錄mysql資料庫的一般狀態信息及報錯信息,是我們對於資料庫常規報錯處理的常用日誌。 預設位置: $MYSQL_HOME/data/ 開啟方式: (MySQL安裝完後預設開啟) 三.一般查詢日誌 作用: 記錄mysql所有執行成功的SQL語句信息,可以 ...
  • 什麼是主從複製 Redis的主從複製機制是指可以讓從伺服器(slave)能精確複製主伺服器(master)的數據,如下圖所示: 或者 主從複製的方式和工作原理 工作方式: Redis主從複製主要有兩種模式:完整重同步(full resynchronization)和部分重同步(partial res ...
  • 陳九禮常用JDBC資料庫驅動包和類名MySQL資料庫: 1)驅動包:https://mvnrepository.com/artifact/mysql/mysql-connector-java(下載路徑) 2)驅動類名:com.mysql.jdbc.Driver 3)JDBC的URL:jdbc:mys ...
  • 學習MYsql是的方向是很重要的,為此,我自發做了思維導圖供大家學習,此部分僅僅是基礎部分,擴展以後我會補充。 ...
  • 1. 在<MYSQL>的根目錄下新建一個my.ini寫入以下內容 2.初始化資料庫 3.直接運行 4.設密碼 5.用Navicate進入 6.設成Windows服務 參考: MySQL57安裝部署(ZIP壓縮包版本)https://blog.csdn.net/To_Coding/article/de ...
  • 緩存雪崩: 比如給緩存中的key設置了統一的過期時間,而在過期時間點,有大量的請求進來,這個時候redis中沒有用戶請求的資源,所以所有的請求會全部擁到資料庫,如果資料庫有報警監測的話,可能會報一下警,然後資料庫就掛掉了。如果這時候把數據重新起來,redis上還是沒有緩存這些內容,資料庫還是會被再一 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...