我的空間,寫我所寫,禪我所藏

          與我一起遨游吧

           

          使用Jakarta POI EXCEL API自動生成ORACLE數據字典的源代碼

          使用Jakarta POI EXCEL API自動生成ORACLE數據字典的源代碼


          在項目的開發過程中,數據字典的維護是一件煩瑣的事情.所以我寫了一段代碼來自動生成數據字典. 其中用到Jakarta POI,這是一個用于訪問Microsoft Format Files的開源項目,詳細信息請看這里. http://jakarta.apache.org/poi/index.html 下面是程序的源代碼及說明


          在項目的開發過程中,數據字典的維護是一件煩瑣的事情.所以我寫了一段代碼來自動生成數據字典.
          其中用到Jakarta POI,這是一個用于訪問Microsoft Format Files的開源項目,詳細信息請看這里.
          http://jakarta.apache.org/poi/index.html
          下面是程序的源代碼及說明

          import java.io.*;
          import java.sql.*;
          import org.apache.poi.hssf.usermodel.*;

          public class AppMain {
            public AppMain() {
            }

            public static void main(String[] args) {
              try {
                  HSSFWorkbook wb = new HSSFWorkbook();
                  HSSFSheet sheet =null;

                /**連接ORACLE的數據庫,關鍵在于兩個系統級的VIEW:
                  all_tab_columns 記錄著ORACLE所有的字段定義信息.
                  DBA_COL_COMMENTS 記錄著字段的注釋信息,*/


                  Class.forName("oracle.jdbc.driver.OracleDriver");
                  Connection con = DriverManager.getConnection(
                      "jdbc:oracle:thin:@127.0.0.1:1521:ORACLE", "用戶名",   "密碼");
                  Statement stmt = con.createStatement();
                  StringBuffer strbuf = new StringBuffer();
                  strbuf.append("SELECT A.*,B.comments");
                  strbuf.append(" FROM all_tab_columns A,DBA_COL_COMMENTS B");
                  strbuf.append(" WHERE A.owner=B.owner");
                  strbuf.append(" AND A.table_name=B.table_name");
                  strbuf.append(" AND A.COLUMN_NAME=B.COLUMN_NAME");
                  //owner是建立表的用戶名
                  strbuf.append(" AND A.owner=myuser");
                  strbuf.append(" ORDER BY A.TABLE_NAME");
                  ResultSet rs = stmt.executeQuery(strbuf.toString());

                  String tb = "";
                  int k = 0;
                  while (rs.next()) {
                      //對每個表生成一個新的sheet,并以表名命名
                    if (!tb.equals(rs.getString("TABLE_NAME"))) {
                      sheet = wb.createSheet(rs.getString("TABLE_NAME"));
                      //設置表頭的說明
                      HSSFRow row = sheet.createRow(0);
                      setCellGBKValue(row.createCell((short) 0),"字段名");
                      setCellGBKValue(row.createCell((short) 1),"字段類型");
                      setCellGBKValue(row.createCell((short) 2),"字段長度");
                      setCellGBKValue(row.createCell((short) 3),"數字長度");
                      setCellGBKValue(row.createCell((short) 4),"小數位數");
                      setCellGBKValue(row.createCell((short) 5),"能否為NULL");
                      setCellGBKValue(row.createCell((short) 6),"字段說明");
                      k = 1;
                    } else {
                      k++;
                    }
                    tb = rs.getString("TABLE_NAME");
                    HSSFRow row = sheet.createRow(k);
                    row.createCell((short) 0).setCellValue(rs.getString(
                          "COLUMN_NAME"));
                    row.createCell((short) 1).setCellValue(rs.getString("DATA_TYPE"));
                    row.createCell((short) 2).setCellValue(rs.getString(
                          "DATA_LENGTH"));
                    row.createCell((short) 3).setCellValue(rs.getString(
                          "DATA_PRECISION"));
                    row.createCell((short) 4).setCellValue(rs.getString(
                          "DATA_SCALE"));
                    row.createCell((short) 5).setCellValue(rs.getString("NULLABLE"));
                    setCellGBKValue(row.createCell((short) 6),rs.getString("COMMENTS"));

                  }

                  //把生成的EXCEL文件輸出保存
                  FileOutputStream fileOut = new FileOutputStream("F:\\數據字典.xls");
                  wb.write(fileOut);
                  fileOut.close();

                  rs.close();
                  stmt.close();
                  con.close();
              } catch (Exception e) {
                  e.printStackTrace();
              }
            }

                  /**

                    這個函數是為了設置一個CELL為中文字符串

                  */

            private static void setCellGBKValue(HSSFCell cell, String value) {
              cell.setCellType(HSSFCell.CELL_TYPE_STRING);
                //設置CELL的編碼信息
              cell.setEncoding(HSSFCell.ENCODING_UTF_16);
              cell.setCellValue(value);
            }
          }


          這樣運行這段代碼后,就會生成一個數據字典.如果需要,可以對選擇的信息做修改,
          只需要修改相關的對ORACLE系統表或者視圖的SELECT語句即可.

          posted on 2007-06-26 10:57 imcb 閱讀(785) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           

          導航

          統計

          常用鏈接

          留言簿(2)

          隨筆分類

          隨筆檔案

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 化隆| 临澧县| 来宾市| 固始县| 自治县| 禄劝| 松桃| 盘锦市| 荆州市| 兰溪市| 神池县| 崇文区| 江津市| 台州市| 南充市| 泰和县| 白水县| 肇庆市| 柳林县| 汶川县| 启东市| 沈丘县| 吴堡县| 宁陕县| 容城县| 修水县| 罗山县| 萨嘎县| 策勒县| 伊金霍洛旗| 越西县| 临沧市| 独山县| 正蓝旗| 彩票| 晴隆县| 夏津县| 虞城县| 霍邱县| 印江| 双峰县|