java 获取oracle表结构_Java导出oracle表结构实例详解
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表结构实例详解相关推荐
- mongodb java查询_java操作mongoDB查询的实例详解
java操作mongo查询的实例详解 前言: MongoDB是一个基于分布式文件存储的数据库.由C++语言编写.旨在为WEB应用提供可扩展的高性能数据存储解决方案. MongoDB是一个介于关系数据库 ...
- java一个方法排他调用_Java编程实现排他锁代码详解
一 .前言 某年某月某天,同事说需要一个文件排他锁功能,需求如下: (1)写操作是排他属性 (2)适用于同一进程的多线程/也适用于多进程的排他操作 (3)容错性:获得锁的进程若Crash,不影响到后续 ...
- java 接口函数_Java函数式接口Supplier接口实例详解
这篇文章主要介绍了Java函数式接口Supplier接口实例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 JDK提供了大量常用的函数式接口以丰 ...
- java supplier接口_Java函数式接口Supplier接口实例详解
这篇文章主要介绍了Java函数式接口Supplier接口实例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 JDK提供了大量常用的函数式接口以丰 ...
- java 静态 编译_Java中的动态和静态编译实例详解
Java中的动态和静态编译实例详解 首先,我们来说说动态和静态编译的问题. Q: java和javascript有什么区别? 总结了一下:有以下几点吧: 1.首先从运行环境来说java代码是在JVM上 ...
- java 分割数据_java 分割csv数据的实例详解
java 分割csv数据的实例详解 实际需要解析的csv中很多都是从excel中转过来的,数据中本身包含了逗号的数据导致split的过程中发现数据对不上,因此,基于这种特性,重新写了一个csv数据的分 ...
- java打印菱形图案_java打印出菱形图案实例详解
第一步:首先对图像进行解析 想要打印该图形必须要进行多层循环嵌套,分两个部分进行打印. 第一部分为上半部分前四行,他们是递增的关系,后半部分后三行为递减关系,由此可以得出我们需要写两个打的循环.并且由 ...
- java原生类型没有封装_Java基本数据类型与封装类型详解(int和Integer区别)
Java基本数据类型与封装类型详解(int和Integer区别) 发布于 2020-4-19| 复制链接 摘记: int是java提供的8种原始数据类型之一.Java为每个原始类型提供了封装类,Int ...
- java中 enum什么意思_Java中枚举Enum的使用详解
在某些情况下,一个类的对象时有限且固定的,如季节类,它只有春夏秋冬4个对象这种实例有限且固定的类,在 Java 中被称为枚举类: 在 Java 中使用 enum 关键字来定义枚举类,其地位与 clas ...
最新文章
- 陈松松:刚入门的视频营销新人,需要做哪些准备?
- 查看运行状态_查看 Linux 系统服务的 5 大方法
- java安装_我最喜欢的Java高级开发人员书籍
- 八篇 NeurIPS 2019 最新图神经网络相关论文
- 经验传承:谈色彩设计方法
- git remote: HTTP Basic: Access denied
- P3575-[POI2014]DOO-Around the world【环形dp】
- 【每日SQL打卡】DAY 1丨部门工资最高的员工【难度中等】
- [ANSYS APDL] 平面单元应力分析全步骤截图详解
- Redis作为缓存服务器
- PS2251-07 海力士(金士顿U盘量产,成功!)
- 7. HTTP 请求,响应
- urule决策引擎实现增量打包部署
- 数据分析 超市条码_超市小程序做得比较好的功能点是什么?
- matlab一维插值extrap,matlab一维插值函数
- Sublime Text2 好用技巧备忘
- 康乐忆享|志愿者心得精选——张凌旭
- 怎么安全的清理WinSxS文件夹?
- 质控三张图 gaochao ards 多个表型写成循环
- 学习纯软件开发(如Java/Python...)还是C语言、嵌入式、物联网呢?
热门文章
- php system startup,opencart Warning: require_once(/system/startup.php) failed to open stream
- idea2019打卡没多久就闪退_IDEA 2020.1打开时闪退的问题及解决方法(完美解决方法)...
- 10无法勾选隐藏的项目_3ds max一直卡在启动页面无法进入
- 今晚直播丨有关Oracle 19c认证体系的一些变化及备考技巧
- 数据库每日一题 2020.05.25
- 计划会议要开始了,产品负责人却没来…
- 循环神经网络LSTM RNN回归:sin曲线预测
- 数仓出现“wait in ccn queue”的时候,怎么迅速定位处理?
- 618物流压力怎么扛?
- 【华为云技术分享】机器学习(02)——学习资料链接