java 查询oracle数据库所有表DatabaseMetaData的用法

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(); } } } } }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要使用Java查询Oracle数据库数据,可以使用以下步骤: 1. 首先,确保已经导入了Oracle JDBC驱动程序。在代码中使用引用中提供的驱动类名 "oracle.jdbc.driver.OracleDriver"。 2. 创建一个数据库连接,指定数据库的URL、用户名和密码。例如: ```java String url = "jdbc:oracle:thin:@localhost:1521:XE"; String username = "your_username"; String password = "your_password"; Connection conn = DriverManager.getConnection(url, username, password); ``` 3. 创建一个Statement对象,用于执行SQL语句。例如: ```java Statement stmt = conn.createStatement(); ``` 4. 编写SQL查询语句。例如,如果要查询名为"employees"的所有数据,可以使用以下代码: ```java String sql = "SELECT * FROM employees"; ``` 5. 执行SQL查询,并获取结果集。例如: ```java ResultSet rs = stmt.executeQuery(sql); ``` 6. 遍历结果集,提取需要的数据。例如,可以使用以下代码将结果集中的数据打印出来: ```java while (rs.next()) { String id = rs.getString("id"); String name = rs.getString("name"); System.out.println("ID: " + id + ", Name: " + name); } ``` 7. 关闭结果集、Statement对象和数据库连接。例如: ```java rs.close(); stmt.close(); conn.close(); ``` 通过以上步骤,你就可以使用Java查询Oracle数据库数据了。请将"your_username"和"your_password"替换为你自己的用户名和密码。希望对你有所帮助!<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [java 查询oracle数据库所有DatabaseMetaData用法(详解)](https://download.csdn.net/download/weixin_38725902/12791086)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Java连接Oracle数据库查询](https://blog.csdn.net/weixin_30832021/article/details/114074509)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值