使用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語句即可.