Java导出oracle表结构实例详解

发布于 2020-7-20|

复制链接

摘记:  Java导出oracle表结构实例详解最近用到的,因为plsql是收费的,不让用,找了很多方法终于发现了这个。

核心语句

```sql

SELECT DBMS_METADATA.GET_DDL(U.OBJECT_TYPE, U. ..

Java导出oracle表结构实例详解最近用到的,因为plsql是收费的,不让用,找了很多方法终于发现了这个。核心语句

```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

```

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

```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 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

```java

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

java 获取oracle表结构_Java导出oracle表结构实例详解相关推荐

  1. mongodb java查询_java操作mongoDB查询的实例详解

    java操作mongo查询的实例详解 前言: MongoDB是一个基于分布式文件存储的数据库.由C++语言编写.旨在为WEB应用提供可扩展的高性能数据存储解决方案. MongoDB是一个介于关系数据库 ...

  2. java一个方法排他调用_Java编程实现排他锁代码详解

    一 .前言 某年某月某天,同事说需要一个文件排他锁功能,需求如下: (1)写操作是排他属性 (2)适用于同一进程的多线程/也适用于多进程的排他操作 (3)容错性:获得锁的进程若Crash,不影响到后续 ...

  3. java 接口函数_Java函数式接口Supplier接口实例详解

    这篇文章主要介绍了Java函数式接口Supplier接口实例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 JDK提供了大量常用的函数式接口以丰 ...

  4. java supplier接口_Java函数式接口Supplier接口实例详解

    这篇文章主要介绍了Java函数式接口Supplier接口实例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 JDK提供了大量常用的函数式接口以丰 ...

  5. java 静态 编译_Java中的动态和静态编译实例详解

    Java中的动态和静态编译实例详解 首先,我们来说说动态和静态编译的问题. Q: java和javascript有什么区别? 总结了一下:有以下几点吧: 1.首先从运行环境来说java代码是在JVM上 ...

  6. java 分割数据_java 分割csv数据的实例详解

    java 分割csv数据的实例详解 实际需要解析的csv中很多都是从excel中转过来的,数据中本身包含了逗号的数据导致split的过程中发现数据对不上,因此,基于这种特性,重新写了一个csv数据的分 ...

  7. java打印菱形图案_java打印出菱形图案实例详解

    第一步:首先对图像进行解析 想要打印该图形必须要进行多层循环嵌套,分两个部分进行打印. 第一部分为上半部分前四行,他们是递增的关系,后半部分后三行为递减关系,由此可以得出我们需要写两个打的循环.并且由 ...

  8. java原生类型没有封装_Java基本数据类型与封装类型详解(int和Integer区别)

    Java基本数据类型与封装类型详解(int和Integer区别) 发布于 2020-4-19| 复制链接 摘记: int是java提供的8种原始数据类型之一.Java为每个原始类型提供了封装类,Int ...

  9. java中 enum什么意思_Java中枚举Enum的使用详解

    在某些情况下,一个类的对象时有限且固定的,如季节类,它只有春夏秋冬4个对象这种实例有限且固定的类,在 Java 中被称为枚举类: 在 Java 中使用 enum 关键字来定义枚举类,其地位与 clas ...

最新文章

  1. 陈松松:刚入门的视频营销新人,需要做哪些准备?
  2. 查看运行状态_查看 Linux 系统服务的 5 大方法
  3. java安装_我最喜欢的Java高级开发人员书籍
  4. 八篇 NeurIPS 2019 最新图神经网络相关论文
  5. 经验传承:谈色彩设计方法
  6. git remote: HTTP Basic: Access denied
  7. P3575-[POI2014]DOO-Around the world【环形dp】
  8. 【每日SQL打卡】DAY 1丨部门工资最高的员工【难度中等】
  9. [ANSYS APDL] 平面单元应力分析全步骤截图详解
  10. Redis作为缓存服务器
  11. PS2251-07 海力士(金士顿U盘量产,成功!)
  12. 7. HTTP 请求,响应
  13. urule决策引擎实现增量打包部署
  14. 数据分析 超市条码_超市小程序做得比较好的功能点是什么?
  15. matlab一维插值extrap,matlab一维插值函数
  16. Sublime Text2 好用技巧备忘
  17. 康乐忆享|志愿者心得精选——张凌旭
  18. 怎么安全的清理WinSxS文件夹?
  19. 质控三张图 gaochao ards 多个表型写成循环
  20. 学习纯软件开发(如Java/Python...)还是C语言、嵌入式、物联网呢?

热门文章

  1. php system startup,opencart Warning: require_once(/system/startup.php) failed to open stream
  2. idea2019打卡没多久就闪退_IDEA 2020.1打开时闪退的问题及解决方法(完美解决方法)...
  3. 10无法勾选隐藏的项目_3ds max一直卡在启动页面无法进入
  4. 今晚直播丨有关Oracle 19c认证体系的一些变化及备考技巧
  5. 数据库每日一题 2020.05.25
  6. 计划会议要开始了,产品负责人却没来…
  7. 循环神经网络LSTM RNN回归:sin曲线预测
  8. 数仓出现“wait in ccn queue”的时候,怎么迅速定位处理?
  9. 618物流压力怎么扛?
  10. 【华为云技术分享】机器学习(02)——学习资料链接