package com.bbkj.main; import com.bbkj.DbUtils.ConnectionPoolManager; import com.bbkj.DbUtils.DbUtil; import com.bbkj.DbUtils.IConnectionPool; import java.io.*; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.util.HashSet; import java.util.Set; /** * Created by Administrator on 2016/12/7. */ public class Json { public static void main(String [] args) throws InterruptedException { testOracle(); } /** * 一個非常標准的連接Oracle數據庫的示例代碼 */ public static void testOracle() { Connection con = null;// 創建一個數據庫連接 PreparedStatement pre = null;// 創建預編譯語句對象,一般都是用這個而不用Statement ResultSet result = null;// 創建一個結果集對象 try { con = DbUtil.pool.getConnection(); String sql = "select * from user_tables";// 預編譯語句,“?”代表參數 pre = con.prepareStatement(sql);// 實例化預編譯語句 //pre.setString(1, "");// 設置參數,前面的1表示參數的索引,而不是表中列名的索引 result = pre.executeQuery();// 執行查詢,注意括號中不需要再加參數 StringBuilder sbstr =new StringBuilder(); //fos.write(rs.getInt(1)); InputStreamReader fis = new InputStreamReader( new FileInputStream(System.getProperty("user.dir")+"/template/template.json")); BufferedReader bis = new BufferedReader(fis); String data = null; while ((data =bis.readLine())!=null){ sbstr.append(data); } data = sbstr.toString(); while (result.next()) { StringBuilder sb =new StringBuilder(); String subsql = "select * from user_tab_columns where table_name = '" + result.getString("table_name") + "'"; PreparedStatement subpre =con.prepareStatement(subsql); ResultSet subresult = subpre.executeQuery(); int i=0; FileOutputStream fos = new FileOutputStream("E:\\bobo\\dbfile\\"+result.getString("table_name")+".json",false); PrintStream p = new PrintStream(fos); while (subresult.next()) { if(i>0){ sb.append(","); } sb.append(" ").append(subresult.getString("COLUMN_NAME")) .append(" "); i++; } System.out.println(sb.toString()); data = data.replaceAll("\\$\\{table\\}",result.getString("table_name")); data = data.replaceAll("\\$\\{fields\\}",sb.toString()); p.print(data.toString()); p.close(); fos.flush(); } } catch (Exception e) { e.printStackTrace(); } finally { try { // 逐一將上面的幾個對象關閉,因為不關閉的話會影響性能、並且占用資源 // 注意關閉的順序,最后使用的最先關閉 if (result != null) result.close(); if (pre != null) pre.close(); if (con != null) { DbUtil.pool.releaseConn(con); con.close(); } System.out.println("數據庫連接已關閉!"); } catch (Exception e) { e.printStackTrace(); } } } }
這里用到了一個別人寫的數據庫連接池:我的另外一篇文章有轉載http://www.cnblogs.com/HendSame-JMZ/articles/6145456.html
//取得該用戶下所有的表
select * from user_tables;
//取得表名為Sysuser的注釋信息
select * from user_tab_comments where table_name = 'SYSUSER';
//取得該用戶下表名為Sysuser表的結構
select * from user_tab_columns where table_name='SYSUSER';
//取得該用戶下表名為sysuser表中字段的注釋信息
select * from user_col_comments where table_name = 'SYSUSER';
//取得該用戶下所有表的中文名稱和英文名稱
select t2.table_name,t2.comments from user_tables t1,user_tab_comments t2 where t1.table_name=t2.table_name;
TABLE_NAME COMMENTS
------------------------------ -----------------------------------------------
SYSUSER 用戶表
//取得表sysuser中的英文字段名,中文字段名,字段類型,字段長度
select t1.TABLE_NAME,t1.COLUMN_NAME,t2.COMMENTS,t1.DATA_TYPE,t1.DATA_LENGTH from user_tab_columns t1, user_col_comments t2 where t1.TABLE_NAME='SYSUSER' and t1.TABLE_NAME=t2.TABLE_NAME and t1.COLUMN_NAME=t2.COLUMN_NAME;
TABLE_NAME COLUMN_NAME COMMENTS DATA_TYPE DATA_LENGTH
----------- ----------------------------------------------------------------------
SYSUSER SYSUSERID 用戶ID VARCHAR2 50
SYSUSER SYSUSERNAME 用戶名 VARCHAR2 50
SYSUSER SYSUSERPASSWORD 密碼