时间:2021-05-19
一 . 得到这个对象的实例
Connection con ;con = DriverManager.getConnection(url,userName,password);DatabaseMetaData dbmd = con.getMetaData();二. 方法getTables的用法
原型:
此方法可返回结果集合ResultSet ,结果集中有5列, 超出会报越界异常
功能描述:得到指定参数的表信息
参数说明:
参数:catalog:目录名称,一般都为空.
参数:schema:数据库名,对于oracle来说就用户名
参数:tablename:表名称
参数:type :表的类型(TABLE | VIEW)
注意:在使用过程中,参数名称必须使用大写的。否则得到什么东西。
三. 方法getColumns的用法
功能描述:得到指定表的列信息。
原型:
参数说明:
参数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 blocke.printStackTrace();}} catch (ClassNotFoundException e) {// TODO Auto-generated catch blocke.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("连接失败");elseSystem.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的用法(详解)全部内容了,希望大家多多支持~
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
MySQL中查询所有数据库名和表名查询所有数据库showdatabases;查询指定数据库中所有表名selecttable_namefrominformatio
在Oracle数据库中查看所有表及对应个表的行数,只用一个select语句查询tablename和numrows两个字段即可。 数据库是“按照数据结构来组织、
正在看的ORACLE教程是:Oracle数据库快照的使用。oracle数据库的快照是一个表,它包含有对一个本地或远程数据库上一个或多个表或视图的查询的结果。正因
Java调用Oracle存储过程详解步骤:1、编写Oracle存储过程2、编写数据库获取连接工具类3、编写简单应用调用存储过程实现:1、Oracle存储过程:/
正在看的ORACLE教程是:Oracle对两个数据表交集的查询。Oracle关系型数据库管理系统是世界上流行的关系数据库,它是一个极其强大、灵活和复杂的系统,据