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

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

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

    數據庫元數據

    第7章 數據庫元數據

    JDBC驅動通過實現DatabaseMetaData接口來提供底層數據源的信息。DatabaseMetaData接口主要被應用服務器和工具使用,以此決定怎樣跟給定數據源交互。普通應用也可以通過DatabaseMetaData的方法得到數據源的信息,但這不常用。

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

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

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

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

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

    7.1 創建DatabaseMetaData對象

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

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

    代碼示例 7-1 創建和使用DatabaseMetaData對象

    7.2 獲取一般信息

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

    7.3 查看支持的特性

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

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

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

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

    • supportsANSI92EntryLevelSQL
    • supportsCoreSQLGrammar

    7.4 數據源限制

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

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

    7.5 SQL對象及其屬性

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

    7.6 事務支持

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

    7.7 新增方法

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

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

    7.8 經過修改的方法

    JDBC 4.0 類庫修改了DatabaseMetaData中下列方法的定義:
    • getTypeInfo --- 如果數據庫支持SQL distinct類型,則getTypeInfo()返回一行TYPE_NAME字段為DISTINCT,DATA_TYPE字段為Types.DISTINCT的數據。如果數據庫支持SQL結構化類型,則getTypeInfo()返回一行TYPE_NAME字段為STRUCT、DATA_TYPE為Types.STRUCT的數據。也添加了對SQLXML和ROWID這些新的數據類型的支持。
    (原文: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 --- 得到給定外鍵表中外鍵列的描述信息,從父表返回的列數應該匹配外鍵列數。它們按照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 --- 闡明當COLUMN_DEF的返回值被引號括起來時,它應該被解釋為一個字符串。
    (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 類庫規范中有這些方法更新后的定義。

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



    版權所有 羅明
    posted on 2005-10-06 13:45 羅明 閱讀(3197) 評論(0)  編輯  收藏 所屬分類: Java
     
    主站蜘蛛池模板: 亚洲va中文字幕无码| 亚洲人成网站在线播放2019| 亚洲国产高清美女在线观看| 亚洲一区二区三区四区视频| 亚洲欧美日韩中文无线码| 国产精品亚洲色婷婷99久久精品| 国产久爱免费精品视频| 久久青草免费91线频观看站街| 成人AV免费网址在线观看| 日本午夜免费福利视频| 亚洲综合久久夜AV | 亚洲欧洲日产国产综合网| 国产成人精品日本亚洲网址 | 久久精品亚洲男人的天堂| 亚洲av之男人的天堂网站| 亚洲av无码片区一区二区三区| 精品女同一区二区三区免费播放| 中国一级全黄的免费观看| 99久久99这里只有免费费精品| 又大又粗又爽a级毛片免费看| 亚洲成AV人在线播放无码| 亚洲永久在线观看| 一本久久A久久免费精品不卡| 十八禁无码免费网站| 在线播放免费人成视频在线观看| 亚洲精品动漫人成3d在线| 亚洲精品视频免费看| 无码日韩人妻AV一区免费l | 亚洲国产综合人成综合网站| 亚洲丁香色婷婷综合欲色啪| 亚洲AV无码XXX麻豆艾秋| 久久精品视频免费| 国产在线播放免费| 久久精品国产亚洲AV高清热| 羞羞视频免费网站入口| 日本免费xxxx色视频| 国产精品亚洲不卡一区二区三区| 亚洲一级片在线观看| 国产99视频精品免费视频76| 毛片免费视频在线观看| 亚洲国产精品无码专区影院 |