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

          與我一起遨游吧

           

          使用Jakarta POI EXCEL API自動(dòng)生成ORACLE數(shù)據(jù)字典的源代碼

          使用Jakarta POI EXCEL API自動(dòng)生成ORACLE數(shù)據(jù)字典的源代碼


          在項(xiàng)目的開(kāi)發(fā)過(guò)程中,數(shù)據(jù)字典的維護(hù)是一件煩瑣的事情.所以我寫了一段代碼來(lái)自動(dòng)生成數(shù)據(jù)字典. 其中用到Jakarta POI,這是一個(gè)用于訪問(wèn)Microsoft Format Files的開(kāi)源項(xiàng)目,詳細(xì)信息請(qǐng)看這里. http://jakarta.apache.org/poi/index.html 下面是程序的源代碼及說(shuō)明


          在項(xiàng)目的開(kāi)發(fā)過(guò)程中,數(shù)據(jù)字典的維護(hù)是一件煩瑣的事情.所以我寫了一段代碼來(lái)自動(dòng)生成數(shù)據(jù)字典.
          其中用到Jakarta POI,這是一個(gè)用于訪問(wèn)Microsoft Format Files的開(kāi)源項(xiàng)目,詳細(xì)信息請(qǐng)看這里.
          http://jakarta.apache.org/poi/index.html
          下面是程序的源代碼及說(shuō)明

          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的數(shù)據(jù)庫(kù),關(guān)鍵在于兩個(gè)系統(tǒng)級(jí)的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()) {
                      //對(duì)每個(gè)表生成一個(gè)新的sheet,并以表名命名
                    if (!tb.equals(rs.getString("TABLE_NAME"))) {
                      sheet = wb.createSheet(rs.getString("TABLE_NAME"));
                      //設(shè)置表頭的說(shuō)明
                      HSSFRow row = sheet.createRow(0);
                      setCellGBKValue(row.createCell((short) 0),"字段名");
                      setCellGBKValue(row.createCell((short) 1),"字段類型");
                      setCellGBKValue(row.createCell((short) 2),"字段長(zhǎng)度");
                      setCellGBKValue(row.createCell((short) 3),"數(shù)字長(zhǎng)度");
                      setCellGBKValue(row.createCell((short) 4),"小數(shù)位數(shù)");
                      setCellGBKValue(row.createCell((short) 5),"能否為NULL");
                      setCellGBKValue(row.createCell((short) 6),"字段說(shuō)明");
                      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:\\數(shù)據(jù)字典.xls");
                  wb.write(fileOut);
                  fileOut.close();

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

                  /**

                    這個(gè)函數(shù)是為了設(shè)置一個(gè)CELL為中文字符串

                  */

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


          這樣運(yùn)行這段代碼后,就會(huì)生成一個(gè)數(shù)據(jù)字典.如果需要,可以對(duì)選擇的信息做修改,
          只需要修改相關(guān)的對(duì)ORACLE系統(tǒng)表或者視圖的SELECT語(yǔ)句即可.

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


          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           

          導(dǎo)航

          統(tǒng)計(jì)

          常用鏈接

          留言簿(2)

          隨筆分類

          隨筆檔案

          文章檔案

          搜索

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 团风县| 博白县| 五大连池市| 资溪县| 兰西县| 江西省| 库尔勒市| 青州市| 华蓥市| 吕梁市| 大方县| 平凉市| 平武县| 全南县| 龙江县| 扎鲁特旗| 鸡泽县| 涿州市| 新和县| 白沙| 纳雍县| 靖安县| 乌审旗| 博客| 桃源县| 敦煌市| 望城县| 临夏县| 东至县| 囊谦县| 延吉市| 襄樊市| 丘北县| 鹿泉市| 清徐县| 涟水县| 凌云县| 海口市| 历史| 嘉峪关市| 中西区|