java 查詢oracle數據庫一切表DatabaseMetaData的用法(詳解)。本站提示廣大學習愛好者:(java 查詢oracle數據庫一切表DatabaseMetaData的用法(詳解))文章只能為提供參考,不一定能成為您想要的結果。以下是java 查詢oracle數據庫一切表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();
}
}
}
}
}
以上就是為大家帶來的java 查詢oracle數據庫一切表DatabaseMetaData的用法(詳解)全部內容了,希望大家多多支持~