Java导出oracle表结构

最近用到的,因为plsql是收费的,不让用,找了很多方法终于发现了这个。

核心语句

[sql]  view plain  copy
  1. SELECT DBMS_METADATA.GET_DDL(U.OBJECT_TYPE, U.object_name), U.OBJECT_TYPE   
  2. FROM USER_OBJECTS U   
  3. where U.OBJECT_TYPE = 'TABLE'   
  4. or U.OBJECT_TYPE = 'VIEW'   
  5. or U.OBJECT_TYPE = 'INDEX'   
  6. or U.OBJECT_TYPE = 'PROCEDURE'   
  7. or U.OBJECT_TYPE = 'SEQUENCE'   
  8. or U.OBJECT_TYPE = 'TRIGGER'   
  9. order by U.OBJECT_TYPE desc  


自己写的Java方法,未做封装。

 

[java]  view plain  copy
  1. package sql;  
  2.   
  3. import java.io.FileInputStream;  
  4. import java.io.FileWriter;  
  5. import java.sql.Clob;  
  6. import java.sql.Connection;  
  7. import java.sql.DriverManager;  
  8. import java.sql.ResultSet;  
  9. import java.sql.Statement;  
  10. import java.util.ArrayList;  
  11. import java.util.List;  
  12. import java.util.Properties;  
  13.   
  14. public class Main {  
  15.   
  16.     private static final String TYPE_MARK = "-1";  
  17.       
  18.     private static String SQL =   
  19.         "SELECT DBMS_METADATA.GET_DDL(U.OBJECT_TYPE, U.object_name), U.OBJECT_TYPE " +  
  20.         "FROM USER_OBJECTS U " +  
  21.         "where U.OBJECT_TYPE = 'TABLE' " +  
  22.         "or U.OBJECT_TYPE = 'VIEW' " +  
  23.         "or U.OBJECT_TYPE = 'INDEX' " +  
  24.         "or U.OBJECT_TYPE = 'PROCEDURE' " +  
  25.         "or U.OBJECT_TYPE = 'SEQUENCE' " +  
  26.         "or U.OBJECT_TYPE = 'TRIGGER' " +  
  27.         "order by U.OBJECT_TYPE desc";  
  28.       
  29.     private static String URL = "jdbc:oracle:thin:@192.168.1.2:1521:orcl";  
  30.     private static String USERNAME = "abc";  
  31.     private static String PASSWORD = "abc";  
  32.     private static String OUTFILE = "tables.sql";  
  33.       
  34.     /** 
  35.      * @param args 
  36.      * @throws Exception  
  37.      * @throws   
  38.      */  
  39.     public static void main(String[] args) throws Exception {  
  40.         // TODO Auto-generated method stub  
  41.         Properties properties = new Properties();  
  42.         properties.load(new FileInputStream("config.properties"));  
  43.         URL = properties.getProperty("url", URL);  
  44.         USERNAME = properties.getProperty("username", USERNAME);  
  45.         PASSWORD = properties.getProperty("password", PASSWORD);  
  46.         OUTFILE = properties.getProperty("outfile", OUTFILE);  
  47.         SQL = properties.getProperty("sql", SQL);  
  48.           
  49.         FileWriter fw = new FileWriter(OUTFILE);  
  50.         Class.forName("oracle.jdbc.driver.OracleDriver");  
  51.         Connection con = DriverManager.getConnection(URL, USERNAME, PASSWORD);  
  52.         Statement statement = con.createStatement();  
  53.         ResultSet rs = statement.executeQuery(SQL);  
  54.         Clob ddl;  
  55.         String type = TYPE_MARK;  
  56.         int count = 0;  
  57.         List<String> list = new ArrayList<String>();  
  58.         while(rs.next()) {  
  59.             ddl = rs.getClob(1);  
  60.             fw.write(ddl.getSubString(1L, (int)ddl.length()));  
  61.             if(!rs.getString(2).equals(type)) {  
  62.                 if(!type.equals(TYPE_MARK)) {  
  63.                     list.add(type + "," + count);  
  64.                     type = rs.getString(2);  
  65.                     count = 1;  
  66.                 } else {  
  67.                     type = rs.getString(2);  
  68.                     count ++;  
  69.                 }  
  70.             } else  
  71.                 count ++;  
  72.         }  
  73.         list.add(type + "," + count);  
  74.         fw.flush();  
  75.         fw.close();  
  76.         rs.close();  
  77.         statement.close();  
  78.         con.close();  
  79.         for(String type1 : list)  
  80.             System.out.print(type1.split(",")[0] + ":" + type1.split(",")[1] + ";");  
  81.         System.out.println();  
  82.     }  
  83.   
  84. }  


config.properties

 

[html]  view plain  copy
  1. url=jdbc:oracle:thin:@192.168.1.2:1521:orcl  
  2. username=abc  
  3. password=abc  
  4. outfile=tables.sql  
  5. sql=SELECT DBMS_METADATA.GET_DDL(U.OBJECT_TYPE, U.object_name), U.OBJECT_TYPE \  
  6. FROM USER_OBJECTS U \  
  7. where U.OBJECT_TYPE = 'TABLE' \  
  8. or U.OBJECT_TYPE = 'VIEW' \  
  9. or U.OBJECT_TYPE = 'INDEX' \  
  10. or U.OBJECT_TYPE = 'PROCEDURE' \  
  11. or U.OBJECT_TYPE = 'SEQUENCE' \  
  12. or U.OBJECT_TYPE = 'TRIGGER' \  
  13. order by U.OBJECT_TYPE desc  


另外需要jdbc的oracle驱动。

学习Java的同学注意了!!! 
学习过程中遇到什么问题或者想获取学习资源的话,欢迎加入Java学习交流群,群号码:523047986  我们一起学Java!

转载于:https://my.oschina.net/abcijkxyz/blog/851309

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值