<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    數(shù)據(jù)庫元數(shù)據(jù)

    第7章 數(shù)據(jù)庫元數(shù)據(jù)

    JDBC驅(qū)動通過實現(xiàn)DatabaseMetaData接口來提供底層數(shù)據(jù)源的信息。DatabaseMetaData接口主要被應(yīng)用服務(wù)器和工具使用,以此決定怎樣跟給定數(shù)據(jù)源交互。應(yīng)用也可以通過DatabaseMetaData的方法得到數(shù)據(jù)源的信息,但這不常用。

    DatabaseMetaData?接口有超過150個方法,根據(jù)提供的信息可以分為以下幾類:

    • 提供數(shù)據(jù)源的一般信息
    • 判斷數(shù)據(jù)源是否支持某種特性或具有某種能力
    • 數(shù)據(jù)源的限制
    • 數(shù)據(jù)源包含哪些SQL對象以及這些對象的屬性
    • 數(shù)據(jù)源提供的事務(wù)支持

    DatabaseMetaData?接口還有超過40個字段,這些字段用于DatabaseMetaData中各種方法的常量返回值。

    這一章粗略介紹一下DatabaseMetaData接口,通過舉例子對元數(shù)據(jù)方法進(jìn)行分類,同時介紹一些新的方法。詳細(xì)介紹請參考JDBC 4.0 類庫規(guī)范

    JDBC中的ResultSetMetaData接口將在第15章“結(jié)果集”介紹。

    7.1 創(chuàng)建DatabaseMetaData對象

    DatabaseMetaData?對象由Connection的getMetaData方法創(chuàng)建,然后我們可以利用它來動態(tài)獲取底層數(shù)據(jù)源的信息。代碼示例 7-1 創(chuàng)建了一個DatabaseMetaData對象,并用它來查看表名允許的最大字符數(shù)。

    // con是一個Connection對象
    DatabaseMetaData dbmd = con.getMetadata();
    int maxLen = dbmd.getMaxTableNameLength();
    

    代碼示例 7-1 創(chuàng)建和使用DatabaseMetaData對象

    7.2 獲取一般信息

    DatabaseMetaData?中有一類方法用于獲取底層數(shù)據(jù)源的一般信息,或者它的一些實現(xiàn)細(xì)節(jié)。這類方法有:
    • getURL
    • getUserName
    • getDatabaseProductVersion, getDriverMajorVersion 和 getDriverMinorVersion
    • getSchemaTerm, getCatalogTerm 和 getProcedureTerm
    • nullsAreSortedHigh 和 nullsAreSortedLow
    • usesLocalFiles 和 usesLocalFilePerTable
    • getSQLKeywords

    7.3 查看支持的特性

    大量DatabaseMetaData方法可以用來判斷驅(qū)動或底層數(shù)據(jù)源是否支持某個特性或特性集。還有一些方法可以告知提供支持的級別。

    判斷是否支持某個特性的方法如下:

    • supportsAlterTableWithDropColumn
    • supportsBatchUpdates
    • supportsTableCorrelationNames
    • supportsPositionedDelete
    • supportsFullOuterJoins
    • supportsStoredProcedures
    • supportsMixedCaseQuotedIdentifiers

    查看特性支持級別的方法:

    • supportsANSI92EntryLevelSQL
    • supportsCoreSQLGrammar

    7.4 數(shù)據(jù)源限制

    另一組方法提供數(shù)據(jù)源對操作的限制信息,如下:
    • getMaxRowSize
    • getMaxStatementLength
    • getMaxTablesInSelect
    • getMaxConnections
    • getMaxCharLiteralLength
    • getMaxColumnsInTable

    方法返回一個整型的限制數(shù)。0表示沒有限制或未知限制。

    7.5 SQL對象及其屬性

    DatabaseMetaData?中有一組方法提供組成數(shù)據(jù)源之SQL對象的信息。這組方法也包含獲取SQL對象屬性的方法。方法的返回值是一個ResultSet,ResultSet的每一行代表一個特定對象。例如,getUDTs方法返回的ResultSet里每一行都是數(shù)據(jù)源里定義的一個UDT(user-defined type)。這類方法主要有:
    • getSchemas
    • getCatalogs
    • getTables
    • getPrimaryKeys
    • getProcedures
    • getProcedureColumns
    • getUDTs

    7.6 事務(wù)支持

    一小部分方法提供數(shù)據(jù)源所支持事務(wù)的語義信息。這類方法主要有:
    • supportsMultipleTransactions
    • getDefaultTransactionIsolation

    7.7 新增方法

    JDBC 4.0 類庫在DatabaseMetaData中引入了下列新方法:
    • getSchemas --- 重載了已有的getSchemas方法,使用目錄和模式作為參數(shù)。
    • supportsStoredFunctionsUsingCallSyntax --- 判斷用戶或廠商自定義的方法是否可以使用存儲過程轉(zhuǎn)義語法來調(diào)用。
    • autoCommitFailureClosesAllResultSets --- 當(dāng)autoCommit設(shè)置為true時,標(biāo)示程序錯誤拋出SQLException后是否所有打開著的結(jié)果集(包括持久(holdable)結(jié)果集)都被關(guān)閉。
    • providesQueryObjectGenerator --- 標(biāo)示JDBC驅(qū)動是否提供自己的QueryObjectGenerator實現(xiàn)。
    • getClientInfoProperties --- 獲取驅(qū)動支持的客戶端屬性列表。

    這些方法的完整定義見JDBC 4.0 類庫規(guī)范(javadoc)。

    7.8 經(jīng)過修改的方法

    JDBC 4.0 類庫修改了DatabaseMetaData中下列方法的定義:
    • getTypeInfo --- 如果數(shù)據(jù)庫支持SQL distinct類型,則getTypeInfo()返回一行TYPE_NAME字段為DISTINCT,DATA_TYPE字段為Types.DISTINCT的一行數(shù)據(jù)。如果數(shù)據(jù)庫支持SQL結(jié)構(gòu)化類型,則getTypeInfo()返回TYPE_NAME字段為STRUCT、DATA_TYPE為Types.STRUCT的一行數(shù)據(jù)。也添加了對SQLXML和ROWID這些新的數(shù)據(jù)類型的支持。
    (原文:Clarified to indicate that if the database supports SQL distinct types, then getTypeInfo() will return a single row with a TYPE_NAME of DISTINCT and a DATA_TYPE of Types.DISTINCT. If the database supports SQL structured types, then getTypeInfo() will return a single row with a TYPE_NAME of STRUCT and a DATA_TYPE of Types.STRUCT. Support has also been added for the new data types SQLXML and ROWID.)

    • getCrossReference --- 得到給定外鍵表中外鍵列的描述信息,從父表返回的列數(shù)應(yīng)該匹配外鍵列數(shù)。它們按照FKTABLE_CAT, FKTABLE_SCHEM, FKTABLE_NAME 和 KEY_SEQ排序。
    (原文:Clarified that the method retrieves a description of the foreign key columns in the given foreign key table that reference the primary key or the unique constraint columns of the parent table (could be the same or a different table). The number of columns returned from the parent table must match the number of columns that make up the foreign key. They are ordered by FKTABLE_CAT, FKTABLE_SCHEM, FKTABLE_NAME, and KEY_SEQ.)

    • getColumns --- 闡明當(dāng)COLUMN_DEF的返回值被引號括起來時,它應(yīng)該被解釋為一個字符串。
    (Clarified that the return value for COLUMN_DEF that the default value for the column, should be interpreted as a string when the value is enclosed in quotes.)

    • getProcedures --- 添加了SPECIFIC_NAME列。返回行按照PROCEDURE_SCHEM,PROCEDURE_NAME 和 SPECIFIC_NAME 排序。

    • getProcedureColumns --- 添加了COLUMN_DEF,SQL_DATATYPE,SQL_DATETIME_SUB,CHAR_OCTET_LENGTH,ORDINAL_POSITION,IS_NULLABLE 和 SPECIFIC_NAME列。返回行按照PROCEDURE_SCHEM,PROCEDURE_NAME 和 SPECIFIC_NAME 排序。

    JDBC 4.0 類庫規(guī)范中有這些方法更新后的定義。

    翻譯進(jìn)度請參考http://www.pgsqldb.org/twiki/bin/view/PgSQL/JDBC4說明書



    版權(quán)所有 羅明
    posted on 2005-10-06 21:58 羅明 閱讀(258) 評論(0)  編輯  收藏

    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導(dǎo)航:
     
     
    主站蜘蛛池模板: 亚洲国产成人精品无码区二本| 亚洲av丰满熟妇在线播放| 亚洲色大成网站www尤物| 亚洲人成免费电影| 91亚洲国产成人久久精品 | 国产精品hd免费观看| 免费在线观看污网站| 日本一区二区在线免费观看 | 四虎永久精品免费观看| 精品亚洲成A人在线观看青青| 大陆一级毛片免费视频观看| 亚洲熟女综合色一区二区三区| 嫩草影院免费观看| 国产亚洲精品成人久久网站| 日本中文一区二区三区亚洲| 一日本道a高清免费播放| 亚洲一区二区三区香蕉| 97久久免费视频| 国内精品久久久久影院亚洲| 国产成人精品男人免费| 国产在线观看xxxx免费| 亚洲精品乱码久久久久久下载| 丁香花在线观看免费观看| 亚洲成AV人片在WWW| 国产午夜亚洲不卡| 亚洲黄色免费观看| 国产成人亚洲精品播放器下载| 中文字幕精品亚洲无线码一区应用| 久操免费在线观看| 亚洲精品无码久久久久APP | 日韩免费a级毛片无码a∨| 色欲aⅴ亚洲情无码AV| 亚洲宅男天堂在线观看无病毒| 亚洲免费福利视频| 看全免费的一级毛片| 亚洲国产精品无码久久久不卡| 无码国产精品一区二区免费 | 无码天堂亚洲国产AV| 久久久久亚洲精品美女| 日本免费观看网站| 免费国产污网站在线观看|