日期:2014-05-16  浏览次数:20504 次

简单代码导出ORACLE数字字典

前话:老系统,居然连数据字典都没,全是SQL。无奈从数据库导出数字字典,很简单的代码,就是读oracel系统表。


把输出保存到文件,然后excel导入,用tab分隔就行了。

?

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

public class Test {

	public static void main(String[] args) {
		try {
			Class.forName("oracle.jdbc.driver.OracleDriver");
			Connection con = DriverManager.getConnection(
					"jdbc:oracle:thin:@192.168.10.11:1521:hzdev", "xiao",
					"xiao");
			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='XIAO'");
			strbuf.append(" ORDER BY A.TABLE_NAME");
			ResultSet rs = stmt.executeQuery(strbuf.toString());
			String tb = "";
			String tempTb=null;
			StringBuffer sb = new StringBuffer();

			int count=0;
			
			while (rs.next()) {
				tb = rs.getString("TABLE_NAME");
				if (!tb.equals(tempTb)) {
					count++;
					sb.append("\n");
					System.out.println(sb.toString());
					sb = new StringBuffer();
					sb.append("表名:"+tb);
					tempTb=tb;
					sb.append("\n字段名称\t");
					sb.append("字段类型\t");
					sb.append("长度\t");
					sb.append("数字长度\t");
					sb.append("小数位数\t");
					sb.append("是否要空\t");
					sb.append("字段说明\t");
				}
				
				sb.append("\n"+rs.getString("COLUMN_NAME") + "\t");
				sb.append(rs.getString("DATA_TYPE") + "\t");
				sb.append(rs.getString("DATA_LENGTH") + "\t");
				sb.append(rs.getString("DATA_PRECISION") + "\t");
				sb.append(rs.getString("DATA_SCALE") + "\t");
				sb.append(rs.getString("NULLABLE") + "\t");
				sb.append(rs.getString("COMMENTS") + "\t");
			} 
			System.out.println("表的个数:"+count);
			rs.close();
			stmt.close();
			con.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}
?