使用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) 編輯 收藏