当前位置: 移动技术网 > IT编程>开发语言>Java > java 查询oracle数据库所有表DatabaseMetaData的用法(详解)

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

2019年07月22日  | 移动技术网IT编程  | 我要评论

桃园鬼谷妖道,吴川一中校园网,smart five

一 . 得到这个对象的实例

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的用法(详解)全部内容了,希望大家多多支持移动技术网~

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网