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