Java導出oracle表結構實例詳解
更新時間:2017年03月03日 14:13:31 投稿:lqh
這篇文章主要介紹了 Java導出oracle表結構實例詳解的相關資料,需要的朋友可以參考下
Java導出oracle表結構實例詳解
最近用到的,因為plsql是收費的,不讓用,找了很多方法終于發(fā)現了這個。
核心語句
SELECT DBMS_METADATA.GET_DDL(U.OBJECT_TYPE, U.object_name), U.OBJECT_TYPE FROM USER_OBJECTS U where U.OBJECT_TYPE = 'TABLE' or U.OBJECT_TYPE = 'VIEW' or U.OBJECT_TYPE = 'INDEX' or U.OBJECT_TYPE = 'PROCEDURE' or U.OBJECT_TYPE = 'SEQUENCE' or U.OBJECT_TYPE = 'TRIGGER' order by U.OBJECT_TYPE desc
自己寫的Java方法,未做封裝。
package sql;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.sql.Clob;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;
public class Main {
private static final String TYPE_MARK = "-1";
private static String SQL =
"SELECT DBMS_METADATA.GET_DDL(U.OBJECT_TYPE, U.object_name), U.OBJECT_TYPE " +
"FROM USER_OBJECTS U " +
"where U.OBJECT_TYPE = 'TABLE' " +
"or U.OBJECT_TYPE = 'VIEW' " +
"or U.OBJECT_TYPE = 'INDEX' " +
"or U.OBJECT_TYPE = 'PROCEDURE' " +
"or U.OBJECT_TYPE = 'SEQUENCE' " +
"or U.OBJECT_TYPE = 'TRIGGER' " +
"order by U.OBJECT_TYPE desc";
private static String URL = "jdbc:oracle:thin:@192.168.1.2:1521:orcl";
private static String USERNAME = "abc";
private static String PASSWORD = "abc";
private static String OUTFILE = "tables.sql";
/**
* @param args
* @throws Exception
* @throws
*/
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
Properties properties = new Properties();
properties.load(new FileInputStream("config.properties"));
URL = properties.getProperty("url", URL);
USERNAME = properties.getProperty("username", USERNAME);
PASSWORD = properties.getProperty("password", PASSWORD);
OUTFILE = properties.getProperty("outfile", OUTFILE);
SQL = properties.getProperty("sql", SQL);
FileWriter fw = new FileWriter(OUTFILE);
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection con = DriverManager.getConnection(URL, USERNAME, PASSWORD);
Statement statement = con.createStatement();
ResultSet rs = statement.executeQuery(SQL);
Clob ddl;
String type = TYPE_MARK;
int count = 0;
List<String> list = new ArrayList<String>();
while(rs.next()) {
ddl = rs.getClob(1);
fw.write(ddl.getSubString(1L, (int)ddl.length()));
if(!rs.getString(2).equals(type)) {
if(!type.equals(TYPE_MARK)) {
list.add(type + "," + count);
type = rs.getString(2);
count = 1;
} else {
type = rs.getString(2);
count ++;
}
} else
count ++;
}
list.add(type + "," + count);
fw.flush();
fw.close();
rs.close();
statement.close();
con.close();
for(String type1 : list)
System.out.print(type1.split(",")[0] + ":" + type1.split(",")[1] + ";");
System.out.println();
}
}
config.properties
url=jdbc:oracle:thin:@192.168.1.2:1521:orcl username=abc password=abc outfile=tables.sql sql=SELECT DBMS_METADATA.GET_DDL(U.OBJECT_TYPE, U.object_name), U.OBJECT_TYPE \ FROM USER_OBJECTS U \ where U.OBJECT_TYPE = 'TABLE' \ or U.OBJECT_TYPE = 'VIEW' \ or U.OBJECT_TYPE = 'INDEX' \ or U.OBJECT_TYPE = 'PROCEDURE' \ or U.OBJECT_TYPE = 'SEQUENCE' \ or U.OBJECT_TYPE = 'TRIGGER' \ order by U.OBJECT_TYPE desc
另外需要jdbc的Oracle驅動。
感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
相關文章
springboot的LogbackLoggingSystem配置加載流程解析
這篇文章主要介紹了springboot的LogbackLoggingSystem配置加載流程源碼分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-11-11
Java notify和notifyAll的區(qū)別和相同
本文主要介紹Java notify和notifyAll的知識,這里整理詳細的資料來說明notify 和NotifAll的區(qū)別,有需要的小伙伴可以參考下2016-09-09
Java中StringUtils與CollectionUtils和ObjectUtil概念講解
這篇文章主要介紹了Java中StringUtils與CollectionUtils和ObjectUtil概念,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習吧2022-12-12
MybatisPlus字段自動填充失效,填充值為null的解決方案
這篇文章主要介紹了MybatisPlus字段自動填充失效,填充值為null的解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-01-01

