java 查询oracle数据库所有表DatabaseMetaData的用法(详解)
一.得到这个对象的实例
Connectioncon; con=DriverManager.getConnection(url,userName,password); DatabaseMetaDatadbmd=con.getMetaData();
二.方法getTables的用法
原型:
ResultSetDatabaseMetaData.getTables(Stringcatalog,Stringschema,StringtableName,String[]type)
此方法可返回结果集合ResultSet,结果集中有5列,超出会报越界异常
功能描述:得到指定参数的表信息
参数说明:
参数:catalog:目录名称,一般都为空.
参数:schema:数据库名,对于oracle来说就用户名
参数:tablename:表名称
参数:type:表的类型(TABLE|VIEW)
注意:在使用过程中,参数名称必须使用大写的。否则得到什么东西。
三.方法getColumns的用法
功能描述:得到指定表的列信息。
原型:
ResultSetDatabaseMetaDatagetColumns(Stringcatalog,Stringschema,StringtableName,StringcolumnName)
参数说明:
参数catalog:类别名称
参数schema:用户方案名称
参数tableName:数据库表名称
参数columnName:列名称
四、方法getPrimaryKeys的用法
功能描述:得到指定表的主键信息。
原型:
ResultSetDatabaseMetaDatagetPrimaryKeys(Stringcatalog,Stringschema,StringtableName)
参数说明:
参数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数组中的某一项,用以表和视图。
importjava.sql.Connection; importjava.sql.DatabaseMetaData; importjava.sql.DriverManager; importjava.sql.ResultSet; importjava.sql.SQLException; importjava.sql.Statement; importjava.util.ArrayList; importjava.util.List; publicclassdababase{ privateStringurl="jdbc:oracle:thin:@localhost:1521:zhyl"; //服务器地址:,端口号:1521,数据库实例名字:zhyl。 privateStringusername="andatabase"; privateStringpw="oracl"; privateConnectionconn=null; //用户名字和密码是自己建立的。 publicConnectionOpenConn(){ try{ Class.forName("oracle.jdbc.driver.OracleDriver"); try{ conn=DriverManager.getConnection(url,username,pw); }catch(SQLExceptione){ //TODOAuto-generatedcatchblock e.printStackTrace(); } }catch(ClassNotFoundExceptione){ //TODOAuto-generatedcatchblock e.printStackTrace(); } returnconn; } publicResultSetexecuteQuery(Stringsql){ dababasedb=newdababase(); ResultSetrs=null; Connectioncon=db.OpenConn(); try{ Statementsm=con.createStatement(); rs=sm.executeQuery(sql); }catch(SQLExceptione){ //TODOAuto-generatedcatchblock e.printStackTrace(); } returnrs; } publicvoidclose(){ try{ conn.close(); }catch(SQLExceptione){ //TODOAuto-generatedcatchblock e.printStackTrace(); } } //获取数据库中所有表的表名,并添加到列表结构中。 publicListgetTableNameList(Connectionconn)throwsSQLException{ DatabaseMetaDatadbmd=conn.getMetaData(); //访问当前用户ANDATABASE下的所有表 ResultSetrs=dbmd.getTables("null","ANDATABASE","%",newString[]{"TABLE"}); //System.out.println("kkkkkk"+dbmd.getTables("null","%","%",newString[]{"TABLE"})); ListtableNameList=newArrayList(); while(rs.next()){ tableNameList.add(rs.getString("TABLE_NAME")); } returntableNameList; } //获取数据表中所有列的列名,并添加到列表结构中。 publicListgetColumnNameList(Connectionconn,StringtableName) throwsSQLException{ DatabaseMetaDatadbmd=conn.getMetaData(); ResultSetrs=dbmd.getColumns(null,"%",tableName,"%"); ListcolumnNameList=newArrayList(); while(rs.next()){ columnNameList.add(rs.getString("COLUMN_NAME")); } returncolumnNameList; } publicstaticvoidmain(Strings[])throwsSQLException { dababasedbConn=newdababase(); Connectionconn=dbConn.OpenConn(); if(conn==null) System.out.println("连接失败"); else System.out.println("连接成功"); try{ ListtableList=dbConn.getTableNameList(conn);//取出当前用户的所有表 //ListtableList=dbConn.getColumnNameList(conn,"LOGIN");//表名称必须是大写的,取出当前表的所有列 System.out.println(tableList.size()); for(Objectobject:tableList){ Stringss=(String)object; System.out.println(ss); } }catch(SQLExceptione){ e.printStackTrace(); }finally{ if(conn!=null){ try{ conn.close(); }catch(SQLExceptione){ e.printStackTrace(); } } } } }
以上就是小编为大家带来的java查询oracle数据库所有表DatabaseMetaData的用法(详解)全部内容了,希望大家多多支持毛票票~