<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 21:58 羅明 閱讀(263) 評論(0)  編輯  收藏

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


    網站導航:
     
     
    主站蜘蛛池模板: 亚洲中文字幕无码中文字在线| 免费无码又爽又刺激高潮| 亚洲日韩中文在线精品第一| 亚洲国产精品无码久久98| 成人免费午夜在线观看| 亚洲黄色激情视频| 日本特黄特黄刺激大片免费| 亚洲风情亚Aⅴ在线发布| 欧洲美熟女乱又伦免费视频| 亚洲av无码日韩av无码网站冲| 全部免费a级毛片| 一级做性色a爰片久久毛片免费| 亚洲精品成人区在线观看| 永久免费精品影视网站| 亚洲AV综合色区无码一区爱AV | 日本免费一区二区三区 | 88av免费观看| 精品久久久久久亚洲精品| 在线jlzzjlzz免费播放| 亚洲AV无码专区在线观看成人 | 亚洲AV日韩精品久久久久久| 91人人区免费区人人| 亚洲中文无码mv| 亚洲国产精品自在拍在线播放| 伊人久久大香线蕉免费视频| 亚洲毛片无码专区亚洲乱| 午夜宅男在线永久免费观看网| 亚洲AV无码成人精品区日韩| 亚洲中久无码永久在线观看同| 91精品国产免费久久国语蜜臀| 亚洲熟女综合一区二区三区| 亚洲黄片毛片在线观看| 99视频精品全部免费观看| 亚洲不卡影院午夜在线观看| 亚洲欧洲中文日韩久久AV乱码| 99久久国产免费中文无字幕| 亚洲AV成人一区二区三区观看 | 免费福利网站在线观看| 人成午夜免费大片在线观看| 亚洲AV无码久久精品蜜桃| 午夜宅男在线永久免费观看网|