<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

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

    與我一起遨游吧

     

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

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


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


    在項目的開發(fā)過程中,數(shù)據(jù)字典的維護是一件煩瑣的事情.所以我寫了一段代碼來自動生成數(shù)據(jù)字典.
    其中用到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的數(shù)據(jù)庫,關鍵在于兩個系統(tǒng)級的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),"數(shù)字長度");
                setCellGBKValue(row.createCell((short) 4),"小數(shù)位數(shù)");
                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:\\數(shù)據(jù)字典.xls");
            wb.write(fileOut);
            fileOut.close();

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

            /**

              這個函數(shù)是為了設置一個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);
      }
    }


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

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


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


    網(wǎng)站導航:
     

    導航

    統(tǒng)計

    常用鏈接

    留言簿(2)

    隨筆分類

    隨筆檔案

    文章檔案

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 最近的中文字幕大全免费版| 亚洲区小说区激情区图片区| 免费看国产曰批40分钟| 亚洲人成亚洲人成在线观看| 免费又黄又爽又猛大片午夜 | 亚洲精品无码不卡在线播放| 亚洲精品无码久久久久A片苍井空| 69pao强力打造免费高清| 亚洲国产专区一区| 亚洲日韩乱码中文无码蜜桃 | 精品无码专区亚洲| 黄色永久免费网站| 国产精品国产亚洲精品看不卡| 亚洲av无码专区在线电影天堂 | 嫩草影院免费观看| 91亚洲va在线天线va天堂va国产 | 综合偷自拍亚洲乱中文字幕| 亚洲成A人片77777国产| 在线观看亚洲AV每日更新无码| 亚洲精品免费视频| 亚洲精品高清无码视频| 一级免费黄色毛片| 日本特黄特色aa大片免费| 免费激情网站国产高清第一页| 亚洲成a人片在线观看日本麻豆| 国产精品亚洲一区二区麻豆| av午夜福利一片免费看久久| 四虎在线视频免费观看| 含羞草国产亚洲精品岁国产精品 | 国内外成人免费视频| 特黄特色大片免费| 国产美女精品视频免费观看 | 免费成人在线视频观看| 亚洲午夜国产精品无码| 5555在线播放免费播放| 亚洲精品无码少妇30P| 久久乐国产精品亚洲综合| 亚洲一区二区三区免费| 亚洲美女视频网址| 伊人久久亚洲综合影院| 免费国产污网站在线观看不要卡|