日期:2014-05-16 浏览次数:20504 次
前话:老系统,居然连数据字典都没,全是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(); } } }?