Java导出oracle表结构实例详解

网友投稿 355 2023-06-05


Java导出oracle表结构实例详解

java导出oracle表结构实例详解

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

核心语NbRquAFC句

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";

privathttp://e static String OUTFILE = "tables.sql";

/**

* @param args

* @throws Exception

* @throws

*/

http:// 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 list = new ArrayList();

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驱动。

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Java中finalize()详解及用法
下一篇:java 动态增加定时任务示例
相关文章

 发表评论

暂时没有评论,来抢沙发吧~