java 查询oracle数据库所有表DatabaseMetaData的用法(详解)

一 . 得到这个对象的实例

Connection con ;
con = DriverManager.getConnection(url,userName,password);
DatabaseMetaData dbmd = con.getMetaData();

二. 方法getTables的用法

原型:

ResultSet DatabaseMetaData.getTables(String catalog,String schema,String tableName,String []type)

此方法可返回结果集合ResultSet ,结果集中有5列, 超出会报越界异常

功能描述:得到指定参数的表信息

参数说明:
参数:catalog:目录名称,一般都为空.
参数:schema:数据库名,对于oracle来说就用户名
参数:tablename:表名称
参数:type :表的类型(TABLE | VIEW)

注意:在使用过程中,参数名称必须使用大写的。否则得到什么东西。

三. 方法getColumns的用法

功能描述:得到指定表的列信息。

原型:

ResultSet DatabaseMetaData getColumns(String catalog,String schema,String tableName,String columnName)

参数说明:

参数catalog : 类别名称
参数schema : 用户方案名称
参数tableName : 数据库表名称
参数columnName : 列名称

四、方法getPrimaryKeys的用法

功能描述:得到指定表的主键信息。

原型:

ResultSet DatabaseMetaData getPrimaryKeys(String catalog,String schema,String tableName)

参数说明:

参数catalog : 类别名称
参数schema : 用户方案名称
参数tableName : 数据库表名称

备注:一定要指定表名称,否则返回值将是什么都没有。

五、方法.getTypeInfo()的用法

功能描述:得到当前数据库的数据类型信息。

六、方法getExportedKeys的用法

功能描述:得到指定表的外键信息。

参数描述:
参数catalog : 类别名称
参数schema : 用户方案名称
参数tableName : 数据库表名称

下面以MySQL和Oracle为例来讲解这个两个参数。

Oracle和MySQL数据的组织结构是完全不同,直观表象上,表和视图的挂接途径不一样,在Oracle中,采取的是分用户管理机制,表和视图挂接在某个用户下,此时用户会成为Oracle的一个”模式(schema)”;而在MySQL中表和视图是直接挂接在数据库下的。这样,在Oralce中获取catalog得到的是null,获取schema得到大写的是用户名称列表。而在MySQL中得到的catalog是数据库名称列表,而schema是null。读者可以通过DatabaseMetaData提供的如下两个方法进行测试,他们返回的都是ResultSet数据类型。

//获取类别定义

rs=dbmd.getCatalogs();

//获取模式定义

rs=dbmd.getSchemas();

基于上述分析:

如果数据库为MySQL:那么第一个参数catalog,可以是数据库的名称,当该项为null时候,为Url串中指定的数据库名称,第二个参数schema,填入null;

如果数据库为Oralce: 那么第一个参数catalog,为null,第二个参数schema,填入大写的用户名称例如”SCOTT”,如果该项目为null,那么查询范围为所有的模式用户。
 
返回值分析

方法getTables返回值是一个结果集(ResultSet)类型,对于该结果集中的信息,到JDK1.5预留了20多个项目用来描述表的相关信息,但是,并不是每个数据都会将这20多个项目返回的. 我们能够常用到的有如下的四个项目:

TABLE_SCHEM:对于Oracle而言,是大写的用户名称,对MySQL而言为null 。

TABLE_NAME:表的名称 。

TABLE_CAT=对Oracle而言为null,对MySQL而言是数据库名称 。

TABLE_TYPE=表的类型,依据第四个参数types数组中的某一项,用以表和视图。

import java.sql.Connection;

import java.sql.DatabaseMetaData;

import java.sql.DriverManager;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.sql.Statement;

import java.util.ArrayList;

import java.util.List;

public class dababase {

private String url="jdbc:oracle:thin:@localhost:1521:zhyl";

//服务器地址:,端口号:1521,数据库实例名字:zhyl。

private String username="andatabase";

private String pw="oracl";

private Connection conn=null;

//用户名字和密码是自己建立的。

public Connection OpenConn(){

try {

Class.forName("oracle.jdbc.driver.OracleDriver");

try {

conn=DriverManager.getConnection(url,username,pw);

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

} catch (ClassNotFoundException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

return conn;

}

public ResultSet executeQuery(String sql){

dababase db = new dababase();

ResultSet rs = null;

Connection con =db.OpenConn();

  try {

    Statement sm = con.createStatement();

    rs = sm.executeQuery(sql);

  } catch (SQLException e) {

   // TODO Auto-generated catch block

   e.printStackTrace();

  }
  return rs;

}

public void close(){

  try {

   conn.close();

  } catch (SQLException e) {

   // TODO Auto-generated catch block

   e.printStackTrace();

  }
}

// 获取数据库中所有表的表名,并添加到列表结构中。

public List getTableNameList(Connection conn) throws SQLException {

DatabaseMetaData dbmd = conn.getMetaData();

//访问当前用户ANDATABASE下的所有表

ResultSet rs = dbmd.getTables("null", "ANDATABASE", "%", new String[] { "TABLE" });

//System.out.println("kkkkkk"+dbmd.getTables("null", "%", "%", new String[] { "TABLE" }));

List tableNameList = new ArrayList();

while (rs.next()) {

tableNameList.add(rs.getString("TABLE_NAME"));

}

return tableNameList;

}

// 获取数据表中所有列的列名,并添加到列表结构中。

public List getColumnNameList(Connection conn, String tableName)

throws SQLException {

DatabaseMetaData dbmd = conn.getMetaData();

ResultSet rs = dbmd.getColumns(null, "%", tableName, "%");

List columnNameList = new ArrayList();

while (rs.next()) {

columnNameList.add(rs.getString("COLUMN_NAME"));

}

return columnNameList;

}

public static void main(String s[]) throws SQLException

{

dababase dbConn = new dababase();

Connection conn = dbConn.OpenConn();

if(conn==null)

System.out.println("连接失败");

else

System.out.println("连接成功");

try {

List tableList = dbConn.getTableNameList(conn);//取出当前用户的所有表

//List tableList = dbConn.getColumnNameList(conn, "LOGIN");//表名称必须是大写的,取出当前表的所有列

System.out.println(tableList.size());

for (Object object : tableList) {

String ss=(String)object;

System.out.println(ss);
}
} catch (SQLException e) {

e.printStackTrace();

} finally {

if (conn != null) {

try {

conn.close();

} catch (SQLException e) {

e.printStackTrace();

}
}
}
}
}

以上就是小编为大家带来的java 查询oracle数据库所有表DatabaseMetaData的用法(详解)全部内容了,希望大家多多支持我们~

(0)

相关推荐

  • java DataInputStream和DataOutputStream详解及实例代码

    java DataInputStream和DataOutputStream详解 操作基本数据类型的流 DataInputStream DataOutputStream import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; public c

  • 从最基本的Java工程搭建SpringMVC+SpringDataJPA+Hibernate

    本文会介绍从一个最基本的java工程,到Web工程,到集成Spring.SpringMVC.SpringDataJPA+Hibernate. 平时我们可能是通过一个模板搭建一个工程,或者是直接导入一个项目,而本文选择从最基本的java工程开始,目的是为了展示更多原理. 当然,我们还是从一个最基本的Maven工程开始,其实普通的非Maven工程,搭建过程几乎是一模一样的,只是Jar包需要我们手动的添加到工程中,而Maven工程就只是修改配置文件即可. 下面就正式开始. 1.基于Maven(如果不使

  • 详解java之redis篇(spring-data-redis整合)

    1,利用spring-data-redis整合 项目使用的pom.xml: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/ma

  • 浅析Java.IO输入输出流 过滤流 buffer流和data流

    java.io使用了适配器模式装饰模式等设计模式来解决字符流的套接和输入输出问题. 字节流只能一次处理一个字节,为了更方便的操作数据,便加入了套接流. 问题引入: 缓冲流为什么比普通的文件字节流效率高? 不带缓冲的操作,每读一个字节就要写入一个字节. 由于涉及磁盘的IO操作相比内存的操作要慢很多,所以不带缓冲的流效率很低. 带缓冲的流,可以一次读很多字节,但不向磁盘中写入,只是先放到内存里. 等凑够了缓冲区大小的时候一次性写入磁盘,这种方式可以减少磁盘操作次数,速度就会提高很多! 这就是两者的区

  • java日期相关类实例详解

    一.Date类 类 Date 表示特定的瞬间,精确到毫秒.用距离1970年1月1日00:00:00的毫秒数(long)类型来表示一个特定的时间点,该值可正可负. Date类中很多方法已经过时,使用Calendar来替代. 常用方法有 long getTime() void setTime(long time) public class T01Date { public static void main(String[] args) { //getTime():返回的时间是距离1970年的毫秒数.

  • java 查询oracle数据库所有表DatabaseMetaData的用法(详解)

    一 . 得到这个对象的实例 Connection con ; con = DriverManager.getConnection(url,userName,password); DatabaseMetaData dbmd = con.getMetaData(); 二. 方法getTables的用法 原型: ResultSet DatabaseMetaData.getTables(String catalog,String schema,String tableName,String []type

  • oracle数据库中sql%notfound的用法详解

    SQL%NOTFOUND 是一个布尔值.与最近的sql语句(update,insert,delete,select)发生交互,当最近的一条sql语句没有涉及任何行的时候,则返回true.否则返回false.这样的语句在实际应用中,是非常有用的.例如要update一行数据时,如果没有找到,就可以作相应操作.如: begin update table_name set salary = 10000 where emp_id = 10; if sql%notfound then insert into

  • Oracle 错误日志表及异常处理包详解 附源码

    1 概述 1. 目的:'快速定位程序异常' 2. 包处理的核心思想:'自治事务' -- 自治事务的 "提交.回滚" 与 主事务 之间互不影响 3. 错误异常记录逻辑大体一致,此处记录,方便需要使用时复制.粘贴 4. 验证思路:通过执行报错的过程,观察 '程序执行结果' 和 '日志表' 数据插入情况 2 效果演示 程序执行截图: 日志表查询截图: 3 源码 说明: 1. 测试中,共有 2 个用户 -- 模拟实际开发场景 (1) odsdata: 存放业务数据 (2) odscde : 执

  • Java常用集合之Set和Map的用法详解

    目录 常用Set集合 Set集合的特点 HashSet 创建对象 常用方法 遍历 常用Map集合 Map集合的概述 HashMap 创建对象 常用方法 遍历 HashMap的key去重原理 常用Set集合 Set集合的特点 ​ Set接口下的集合都会有以下特点 不能存储重复元素 没有索引 HashSet HashSet集合的特点 底层数据结构是哈希表 存储元素的顺序和遍历获取出来的顺序可能不一致 没有索引 集合中不能存储重复元素 创建对象 HashSet<元素数据类型> set = new H

  • java dump文件怎么生成和分析-JMAP用法详解

    jmap是java自带的工具 1. 查看整个JVM内存状态 jmap -heap [pid] 2. 查看JVM堆中对象详细占用情况 jmap -histo [pid] 3. 导出整个JVM 中内存信息,可以利用其它工具打开dump文件分析,例如jdk自带的visualvm工具 jmap -dump:file=文件名.dump [pid] 补充知识:Jmap导出java运行中的堆内存dump及Jprofiler分析方法 1.jmap导出dump 1.1运行程序的java\bin目录,执行jmap

  • java中的抽象类和接口定义与用法详解

    目录 一.抽象类 1.什么叫抽象类? 2.抽象类的特点: 3.成员特点: 二.接口 1.接口是什么? 2.接口的特点 3.接口的组成成员 4.类与抽象的关系: 5.抽象类与接口的区别: 一.抽象类 1.什么叫抽象类? 例如在生活中我们都把狗和猫归为动物着一类中,但当只说动物时,我们是不知道是猫还是狗还是其他的.所以动物就是所谓的抽象类,猫和狗则是具体的类了.因此在Java中,一个没有方法体的方法应该定义为抽象类,而类中有抽象方法,则必须为抽象类. 2.抽象类的特点: 抽象类与抽象方法必须用abs

  • Java常用API类之Math System tostring用法详解

    1.注意(类名不能与math重名,否则可能报错误) 1.math:可以直接拿来用的接口类 Math.abs(-90);返回参数的绝对值 Math.max(60,98)返回参数的最大值 Math.random()*100随机函数:随机输出一个数 等等 public static void main(String[] args){ int a = 1300, b = 1000; System.out.println(Math.abs(-90)); System.out.println(Math.ma

  • Oracle数据库中通用的函数实例详解

    目录 一. Scott用户下的表结构 1.如果自己没有Scoot表就可以自己创建一个 二.单行函数 1.字符函数 2.数值函数 三.多行函数(聚合函数) 1.统计记录数 2.最小值查询 min() 3.最大值查询 max() 4.平均值查询 avg() 5.求和函数 四.分组统计 总结 一. Scott用户下的表结构 SCOTT.是在Oracle数据库中,一个示例用户的名称.其作用是为初学者提供一些简单的应用示例,不过其默认是锁定状态,在安装时,根据用户需要,在“数据库配置助手”界面完成后,弹出

  • Oracle数据库事务的开启与结束详解

    目录 前言 commit Truncate – DDL select xxx for update select…for update使用方法 失败的DML 和 exit DCL 总结 前言 Oracle的事务开始于一个DML语句. 当以下情况发生时,事务结束: 1.COMMIT/ROLLBACK 2.执行了DDL/DCL语句 3.客户端主动断开数据库的连接(DISCONNECT) 4.数据库关闭(宕机) 另外,一个DDL/DCL语句实际上就是一个事务,其中隐含了COMMIT. Oracle不需

  • mysql数据库单表最大存储依据详解

    目录 引言 数据库单表行数最大多大? 索引的结构 页的结构 从页到索引 B+树承载的记录数量 x怎么算 y的计算 行总数计算 行数超一亿就慢了吗? B树承载的记录数量 总结 引言 故事从好多年前说起. 想必大家也听说过数据库单表建议最大2kw条数据这个说法.如果超过了,性能就会下降得比较厉害. 巧了. 我也听说过. 但我不接受它的建议,硬是单表装了1亿条数据. 这时候,我们组里新来的实习生看到了之后,天真无邪的问我:"单表不是建议最大两千万吗?为什么这个表都放了1个亿还不分库分表"?

随机推荐