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 : 數據庫表名稱

 

 

下面以MySQLOracle爲例來講解這個兩個參數。

 

OracleMySQL數據的組織結構是完全不同,直觀表象上,表和視圖的掛接途徑不一樣,Oracle,採取的是分用戶管理機制,表和視圖掛接在某個用戶下,此時用戶會成爲Oracle的一個模式(schema)”;而在MySQL中表和視圖是直接掛接在數據庫下的。這樣,在Oralce中獲取catalog得到的是null,獲取schema得到大寫的是用戶名稱列表。而在MySQL中得到的catalog是數據庫名稱列表,而schemanull。讀者可以通過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();

}

}

}

}

}

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章