java 查詢oracle數據庫全部表DatabaseMetaData的用法

 

DatabaseMetaData的用法(轉)

 . 獲得這個對象的實例java

Connection con ; con = DriverManager.getConnection(url,userName,password); DatabaseMetaData dbmd = con.getMetaData();

 

方法getTables的用法
原型:sql

ResultSet DatabaseMetaData.getTables(String catalog,String schema,String tableName,String []type)

此方法可返回結果集合ResultSet ,結果集中有5列, 超出會報越界異常數據庫


功能描述:獲得指定參數的表信息數組

參數說明:
參數:catalog:目錄名稱,通常都爲空.
參數:schema:數據庫名,對於oracle來講就用戶名
參數:tablename:表名稱
參數:type :表的類型(TABLE | VIEW)服務器

注意:在使用過程當中,參數名稱必須使用大寫的。不然獲得什麼東西。oracle

方法getColumns的用法測試

功能描述:獲得指定表的列信息。url

原型:spa

ResultSet DatabaseMetaData getColumns(String catalog,String schema,String tableName,String columnName)

參數說明:對象

參數catalog : 類別名稱
參數schema : 用戶方案名稱
參數tableName : 數據庫表名稱
參數columnName : 列名稱

4、方法getPrimaryKeys的用法

功能描述:獲得指定表的主鍵信息。

原型:

ResultSet DatabaseMetaData getPrimaryKeys(String catalog,String schema,String tableName)

參數說明:

參數catalog : 類別名稱
參數schema : 用戶方案名稱
參數tableName : 數據庫表名稱

備註:必定要指定表名稱,不然返回值將是什麼都沒有。

5、方法.getTypeInfo()的用法

功能描述:獲得當前數據庫的數據類型信息。

6、方法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(); } } } } }
相關文章
相關標籤/搜索