提取数据库中表的数据字典

1、下载ojdbc6-11.2.0.1.jar
2、下载poi-3.2-FINAL.jar
3、测试代码如下:
public class DataDictionary {

public static Connection getConnection() {

Connection connection = null;
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
connection = DriverManager.getConnection("jdbc:oracle:thin:@localhost:orcl", "scott", "tiger");
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
return connection;
}

public static void main(String[] args) throws SQLException {

try {
HSSFWorkbook wb = new HSSFWorkbook();
HSSFSheet sheet = null;
Connection connection = getConnection();
Statement stmt = connection.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");
strbuf.append(" AND A.owner='SCOTT'");
strbuf.append(" ORDER BY A.TABLE_NAME, A.COLUMN_ID");
ResultSet rs = stmt.executeQuery(strbuf.toString());

String tb = "";
int k = 0;
while (rs.next()) {
if (!tb.equals(rs.getString("TABLE_NAME"))) {
sheet = wb.createSheet(rs.getString("TABLE_NAME"));
HSSFRow row = sheet.createRow(0);
setCellGBKValue(row.createCell(0), "COLUMN_NAME");
setCellGBKValue(row.createCell(1), "DATA_TYPE");
setCellGBKValue(row.createCell(2), "NULLABLE");
setCellGBKValue(row.createCell(3), "COMMENTS");
k = 1;
} else {
k++;
}
tb = rs.getString("TABLE_NAME");
HSSFRow row = sheet.createRow(k);
setCellGBKValue(row.createCell(0), rs.getString("COLUMN_NAME"));
String str = rs.getString("DATA_TYPE");
StringBuilder sb = new StringBuilder();
sb.append(str);
if ("NUMBER".equals(str)) {
String precision = rs.getString("DATA_PRECISION");
if (precision != null) {
sb.append("(" + precision);
}
String scale = rs.getString("DATA_SCALE");
if (scale != null && !"0".equals(scale)) {
sb.append(", " + rs.getString("DATA_SCALE"));
}
if (precision != null) {
sb.append(")");
}
}
if ("VARCHAR2".endsWith(str)) {
sb.append("(" + rs.getString("DATA_LENGTH") + ")");
}

setCellGBKValue(row.createCell(1), sb.toString());
setCellGBKValue(row.createCell(2), rs.getString("NULLABLE"));
setCellGBKValue(row.createCell(3), rs.getString("COMMENTS"));
sheet.autoSizeColumn((short) 0);
sheet.autoSizeColumn((short) 1);
sheet.autoSizeColumn((short) 2);
sheet.autoSizeColumn((short) 3);
}

FileOutputStream fileOut = new FileOutputStream("D:\\数据字典.xls");
wb.write(fileOut);
fileOut.close();
rs.close();
stmt.close();
connection.close();
} catch (Exception e) {
e.printStackTrace();
}
}

private static void setCellGBKValue(HSSFCell cell, String value) {
cell.setCellType(HSSFCell.CELL_TYPE_STRING);
HSSFRichTextString hssfRichTextString = new HSSFRichTextString(value);
cell.setCellValue(hssfRichTextString);
}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值