最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java 查詢oracle數(shù)據(jù)庫所有表DatabaseMetaData的用法(詳解)

 更新時(shí)間:2016年11月12日 20:06:38   投稿:jingxian  
下面小編就為大家?guī)硪黄猨ava 查詢oracle數(shù)據(jù)庫所有表DatabaseMetaData的用法(詳解)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧

一 . 得到這個(gè)對象的實(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列, 超出會報(bào)越界異常

功能描述:得到指定參數(shù)的表信息

參數(shù)說明:
參數(shù):catalog:目錄名稱,一般都為空.
參數(shù):schema:數(shù)據(jù)庫名,對于oracle來說就用戶名
參數(shù):tablename:表名稱
參數(shù):type :表的類型(TABLE | VIEW)

注意:在使用過程中,參數(shù)名稱必須使用大寫的。否則得到什么東西。

三. 方法getColumns的用法

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

原型:

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

參數(shù)說明:

參數(shù)catalog : 類別名稱
參數(shù)schema : 用戶方案名稱
參數(shù)tableName : 數(shù)據(jù)庫表名稱
參數(shù)columnName : 列名稱

四、方法getPrimaryKeys的用法

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

原型:

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

參數(shù)說明:

參數(shù)catalog : 類別名稱
參數(shù)schema : 用戶方案名稱
參數(shù)tableName : 數(shù)據(jù)庫表名稱

備注:一定要指定表名稱,否則返回值將是什么都沒有。

五、方法.getTypeInfo()的用法

功能描述:得到當(dāng)前數(shù)據(jù)庫的數(shù)據(jù)類型信息。

六、方法getExportedKeys的用法

功能描述:得到指定表的外鍵信息。

參數(shù)描述:
參數(shù)catalog : 類別名稱
參數(shù)schema : 用戶方案名稱
參數(shù)tableName : 數(shù)據(jù)庫表名稱

下面以MySQL和Oracle為例來講解這個(gè)兩個(gè)參數(shù)。

Oracle和MySQL數(shù)據(jù)的組織結(jié)構(gòu)是完全不同,直觀表象上,表和視圖的掛接途徑不一樣,在Oracle中,采取的是分用戶管理機(jī)制,表和視圖掛接在某個(gè)用戶下,此時(shí)用戶會成為Oracle的一個(gè)”模式(schema)”;而在MySQL中表和視圖是直接掛接在數(shù)據(jù)庫下的。這樣,在Oralce中獲取catalog得到的是null,獲取schema得到大寫的是用戶名稱列表。而在MySQL中得到的catalog是數(shù)據(jù)庫名稱列表,而schema是null。讀者可以通過DatabaseMetaData提供的如下兩個(gè)方法進(jìn)行測試,他們返回的都是ResultSet數(shù)據(jù)類型。

//獲取類別定義

rs=dbmd.getCatalogs();

//獲取模式定義

rs=dbmd.getSchemas();

基于上述分析:

如果數(shù)據(jù)庫為MySQL:那么第一個(gè)參數(shù)catalog,可以是數(shù)據(jù)庫的名稱,當(dāng)該項(xiàng)為null時(shí)候,為Url串中指定的數(shù)據(jù)庫名稱,第二個(gè)參數(shù)schema,填入null;

如果數(shù)據(jù)庫為Oralce: 那么第一個(gè)參數(shù)catalog,為null,第二個(gè)參數(shù)schema,填入大寫的用戶名稱例如”SCOTT”,如果該項(xiàng)目為null,那么查詢范圍為所有的模式用戶。
 
返回值分析

方法getTables返回值是一個(gè)結(jié)果集(ResultSet)類型,對于該結(jié)果集中的信息,到JDK1.5預(yù)留了20多個(gè)項(xiàng)目用來描述表的相關(guān)信息,但是,并不是每個(gè)數(shù)據(jù)都會將這20多個(gè)項(xiàng)目返回的. 我們能夠常用到的有如下的四個(gè)項(xiàng)目:

TABLE_SCHEM:對于Oracle而言,是大寫的用戶名稱,對MySQL而言為null 。

TABLE_NAME:表的名稱 。

TABLE_CAT=對Oracle而言為null,對MySQL而言是數(shù)據(jù)庫名稱 。

TABLE_TYPE=表的類型,依據(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ù)器地址:,端口號:1521,數(shù)據(jù)庫實(shí)例名字: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();

  }
}

// 獲取數(shù)據(jù)庫中所有表的表名,并添加到列表結(jié)構(gòu)中。

public List getTableNameList(Connection conn) throws SQLException {

DatabaseMetaData dbmd = conn.getMetaData();

//訪問當(dāng)前用戶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)前用戶的所有表

//List tableList = dbConn.getColumnNameList(conn, "LOGIN");//表名稱必須是大寫的,取出當(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ī)淼膉ava 查詢oracle數(shù)據(jù)庫所有表DatabaseMetaData的用法(詳解)全部內(nèi)容了,希望大家多多支持腳本之家~

相關(guān)文章

  • Java并發(fā)編程之淺談ReentrantLock

    Java并發(fā)編程之淺談ReentrantLock

    今天帶大家學(xué)習(xí)Java并發(fā)編程的相關(guān)知識,文中對Java ReentrantLock作了非常詳細(xì)的圖文示例,對正在學(xué)習(xí)java的小伙伴們有很好地幫助,需要的朋友可以參考下
    2021-05-05
  • 通過Java實(shí)現(xiàn)在Word中創(chuàng)建可填充表單

    通過Java實(shí)現(xiàn)在Word中創(chuàng)建可填充表單

    這篇文章主要為大家詳細(xì)介紹了如何通過Java代碼,以編程方式在Word中創(chuàng)建可填充表單,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下
    2023-03-03
  • JavaWeb入門:HttpResponse和HttpRequest詳解

    JavaWeb入門:HttpResponse和HttpRequest詳解

    這篇文章主要介紹了Django的HttpRequest和HttpResponse對象,分享了相關(guān)代碼示例,小編覺得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2021-07-07
  • 淺談SpringBoot中的@Conditional注解的使用

    淺談SpringBoot中的@Conditional注解的使用

    這篇文章主要介紹了淺談SpringBoot中的@Conditional注解的使用,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2019-04-04
  • MyBatis?多表聯(lián)合查詢及優(yōu)化方法

    MyBatis?多表聯(lián)合查詢及優(yōu)化方法

    大家都知道Hibernate 是全自動的數(shù)據(jù)庫持久層框架,它可以通過實(shí)體來映射數(shù)據(jù)庫,通過設(shè)置一對多、多對一、一對一、多對多的關(guān)聯(lián)來實(shí)現(xiàn)聯(lián)合查詢,接下來通過本文給大家介紹MyBatis?多表聯(lián)合查詢及優(yōu)化,需要的朋友可以參考下
    2022-08-08
  • springboot連接多個(gè)數(shù)據(jù)庫的實(shí)現(xiàn)方法

    springboot連接多個(gè)數(shù)據(jù)庫的實(shí)現(xiàn)方法

    有時(shí)候一個(gè)SpringBoot項(xiàng)目需要同時(shí)連接兩個(gè)數(shù)據(jù)庫,本文就來介紹一下springboot連接多個(gè)數(shù)據(jù)庫的實(shí)現(xiàn)方法,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-08-08
  • SpringBoot使用Redis緩存的實(shí)現(xiàn)方法

    SpringBoot使用Redis緩存的實(shí)現(xiàn)方法

    這篇文章主要介紹了SpringBoot使用Redis緩存的實(shí)現(xiàn)方法,需要的朋友可以參考下
    2018-02-02
  • elasticsearch源碼分析index?action實(shí)現(xiàn)方式

    elasticsearch源碼分析index?action實(shí)現(xiàn)方式

    這篇文章主要為大家介紹了elasticsearch源碼分析index?action實(shí)現(xiàn)方式,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-04-04
  • 使用Maven打包時(shí)排除指定的目錄或指定的類

    使用Maven打包時(shí)排除指定的目錄或指定的類

    在maven項(xiàng)目中,通過修改pom.xml文件,在maven-compiler-plugin的configuration>excludes節(jié)點(diǎn)下添加排除匹配條件,可以剔除掉生產(chǎn)包中的測試類,注意使用**表示多級目錄匹配,*表示一級目錄匹配
    2024-11-11
  • 在Java內(nèi)存模型中測試并發(fā)程序代碼

    在Java內(nèi)存模型中測試并發(fā)程序代碼

    這篇文章主要介紹了在Java內(nèi)存模型中測試并發(fā)程序代碼,輔以文中所提到的JavaScript庫JCStress進(jìn)行,需要的朋友可以參考下
    2015-07-07

最新評論

德州市| 宜阳县| 隆化县| 岳阳市| 敦化市| 黑山县| 乌拉特中旗| 上犹县| 麻江县| 定日县| 南江县| 肥西县| 乐平市| 景洪市| 色达县| 北京市| 科技| 苍溪县| 三都| 应城市| 宁强县| 邵阳县| 中牟县| 卢龙县| 察哈| 荆门市| 菏泽市| 澄迈县| 宽甸| 西宁市| 南华县| 浮梁县| 平凉市| 宣汉县| 蓝田县| 巴林左旗| 峡江县| 广丰县| 汪清县| 个旧市| 莱阳市|