java 查詢(xún)oracle數(shù)據(jù)庫(kù)所有表DatabaseMetaData的用法(詳解)
一 . 得到這個(gè)對(duì)象的實(shí)例
Connection con ; con = DriverManager.getConnection(url,userName,password); DatabaseMetaData dbmd = con.getMetaData();
二. 方法getTables的用法
原型:
ResultSet DatabaseMetaData.getTables(String catalog,String schema,String tableName,String []type)
此方法可返回結(jié)果集合ResultSet ,結(jié)果集中有5列, 超出會(huì)報(bào)越界異常
功能描述:得到指定參數(shù)的表信息
參數(shù)說(shuō)明:
參數(shù):catalog:目錄名稱(chēng),一般都為空.
參數(shù):schema:數(shù)據(jù)庫(kù)名,對(duì)于oracle來(lái)說(shuō)就用戶(hù)名
參數(shù):tablename:表名稱(chēng)
參數(shù):type :表的類(lèi)型(TABLE | VIEW)
注意:在使用過(guò)程中,參數(shù)名稱(chēng)必須使用大寫(xiě)的。否則得到什么東西。
三. 方法getColumns的用法
功能描述:得到指定表的列信息。
原型:
ResultSet DatabaseMetaData getColumns(String catalog,String schema,String tableName,String columnName)
參數(shù)說(shuō)明:
參數(shù)catalog : 類(lèi)別名稱(chēng)
參數(shù)schema : 用戶(hù)方案名稱(chēng)
參數(shù)tableName : 數(shù)據(jù)庫(kù)表名稱(chēng)
參數(shù)columnName : 列名稱(chēng)
四、方法getPrimaryKeys的用法
功能描述:得到指定表的主鍵信息。
原型:
ResultSet DatabaseMetaData getPrimaryKeys(String catalog,String schema,String tableName)
參數(shù)說(shuō)明:
參數(shù)catalog : 類(lèi)別名稱(chēng)
參數(shù)schema : 用戶(hù)方案名稱(chēng)
參數(shù)tableName : 數(shù)據(jù)庫(kù)表名稱(chēng)
備注:一定要指定表名稱(chēng),否則返回值將是什么都沒(méi)有。
五、方法.getTypeInfo()的用法
功能描述:得到當(dāng)前數(shù)據(jù)庫(kù)的數(shù)據(jù)類(lèi)型信息。
六、方法getExportedKeys的用法
功能描述:得到指定表的外鍵信息。
參數(shù)描述:
參數(shù)catalog : 類(lèi)別名稱(chēng)
參數(shù)schema : 用戶(hù)方案名稱(chēng)
參數(shù)tableName : 數(shù)據(jù)庫(kù)表名稱(chēng)
下面以MySQL和Oracle為例來(lái)講解這個(gè)兩個(gè)參數(shù)。
Oracle和MySQL數(shù)據(jù)的組織結(jié)構(gòu)是完全不同,直觀表象上,表和視圖的掛接途徑不一樣,在Oracle中,采取的是分用戶(hù)管理機(jī)制,表和視圖掛接在某個(gè)用戶(hù)下,此時(shí)用戶(hù)會(huì)成為Oracle的一個(gè)”模式(schema)”;而在MySQL中表和視圖是直接掛接在數(shù)據(jù)庫(kù)下的。這樣,在Oralce中獲取catalog得到的是null,獲取schema得到大寫(xiě)的是用戶(hù)名稱(chēng)列表。而在MySQL中得到的catalog是數(shù)據(jù)庫(kù)名稱(chēng)列表,而schema是null。讀者可以通過(guò)DatabaseMetaData提供的如下兩個(gè)方法進(jìn)行測(cè)試,他們返回的都是ResultSet數(shù)據(jù)類(lèi)型。
//獲取類(lèi)別定義
rs=dbmd.getCatalogs();
//獲取模式定義
rs=dbmd.getSchemas();
基于上述分析:
如果數(shù)據(jù)庫(kù)為MySQL:那么第一個(gè)參數(shù)catalog,可以是數(shù)據(jù)庫(kù)的名稱(chēng),當(dāng)該項(xiàng)為null時(shí)候,為Url串中指定的數(shù)據(jù)庫(kù)名稱(chēng),第二個(gè)參數(shù)schema,填入null;
如果數(shù)據(jù)庫(kù)為Oralce: 那么第一個(gè)參數(shù)catalog,為null,第二個(gè)參數(shù)schema,填入大寫(xiě)的用戶(hù)名稱(chēng)例如”SCOTT”,如果該項(xiàng)目為null,那么查詢(xún)范圍為所有的模式用戶(hù)。
返回值分析
方法getTables返回值是一個(gè)結(jié)果集(ResultSet)類(lèi)型,對(duì)于該結(jié)果集中的信息,到JDK1.5預(yù)留了20多個(gè)項(xiàng)目用來(lái)描述表的相關(guān)信息,但是,并不是每個(gè)數(shù)據(jù)都會(huì)將這20多個(gè)項(xiàng)目返回的. 我們能夠常用到的有如下的四個(gè)項(xiàng)目:
TABLE_SCHEM:對(duì)于Oracle而言,是大寫(xiě)的用戶(hù)名稱(chēng),對(duì)MySQL而言為null 。
TABLE_NAME:表的名稱(chēng) 。
TABLE_CAT=對(duì)Oracle而言為null,對(duì)MySQL而言是數(shù)據(jù)庫(kù)名稱(chēng) 。
TABLE_TYPE=表的類(lèi)型,依據(jù)第四個(gè)參數(shù)types數(shù)組中的某一項(xiàng),用以表和視圖。
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"; //服務(wù)器地址:,端口號(hào):1521,數(shù)據(jù)庫(kù)實(shí)例名字:zhyl。 private String username="andatabase"; private String pw="oracl"; private Connection conn=null; //用戶(hù)名字和密碼是自己建立的。 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(); } } // 獲取數(shù)據(jù)庫(kù)中所有表的表名,并添加到列表結(jié)構(gòu)中。 public List getTableNameList(Connection conn) throws SQLException { DatabaseMetaData dbmd = conn.getMetaData(); //訪問(wèn)當(dāng)前用戶(hù)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; } // 獲取數(shù)據(jù)表中所有列的列名,并添加到列表結(jié)構(gòu)中。 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);//取出當(dāng)前用戶(hù)的所有表 //List tableList = dbConn.getColumnNameList(conn, "LOGIN");//表名稱(chēng)必須是大寫(xiě)的,取出當(dāng)前表的所有列 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(); } } } } }
以上就是小編為大家?guī)?lái)的java 查詢(xún)oracle數(shù)據(jù)庫(kù)所有表DatabaseMetaData的用法(詳解)全部?jī)?nèi)容了,希望大家多多支持腳本之家~
相關(guān)文章
Spring Boot 添加MySQL數(shù)據(jù)庫(kù)及JPA實(shí)例
本篇文章主要介紹了Spring Boot 添加MySQL數(shù)據(jù)庫(kù)及JPA,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-03-03Java連接PostgreSql數(shù)據(jù)庫(kù)及基本使用方式
這篇文章主要介紹了Java連接PostgreSql數(shù)據(jù)庫(kù)及基本使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-03-03永中文檔在線轉(zhuǎn)換服務(wù)Swagger調(diào)用說(shuō)明
這篇文章主要為大家介紹了永中文檔在線轉(zhuǎn)換服務(wù)Swagger調(diào)用說(shuō)明,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-06-06使用工具類(lèi)-java精確到小數(shù)點(diǎn)后6位
這篇文章主要介紹了使用工具類(lèi)-java精確到小數(shù)點(diǎn)后6位,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-10-10解決idea刪除模塊后重新創(chuàng)建顯示該模塊已經(jīng)被注冊(cè)的問(wèn)題
這篇文章主要介紹了解決idea刪除模塊后重新創(chuàng)建顯示該模塊已經(jīng)被注冊(cè)的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-02-02SpringBoot集成SpringSecurity和JWT做登陸鑒權(quán)的實(shí)現(xiàn)
這篇文章主要介紹了SpringBoot集成SpringSecurity和JWT做登陸鑒權(quán)的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-04-0415道非常經(jīng)典的Java面試題 附詳細(xì)答案
這篇文章主要為大家推薦了15道非常經(jīng)典的Java面試題,附詳細(xì)答案,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-10-10