欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2024-03-12 11:43:32
一 . 得到这个对象的实例 connection con ; con = drivermanager.getconnection(url,username,pa...

一 . 得到这个对象的实例

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