DatabaseMetadata 接口通過JDBC驅(qū)動程序的實(shí)現(xiàn)提供基礎(chǔ)數(shù)據(jù)源的信息序仙。它主要由應(yīng)用程序服務(wù)器和工具來決定如何與給定的數(shù)據(jù)源交互记某。應(yīng)用程序也可以使用databasemetadata方法來獲取有關(guān)數(shù)據(jù)源的信息苛聘,但這是不特別的
DatabaseMetadata 接口包括超過150個方法滔吠,可以根據(jù)他們提供的信息的類型分類:
- 關(guān)于數(shù)據(jù)源的一般信息
- 數(shù)據(jù)源是否支持給定的特性或功能
- 數(shù)據(jù)源的限制
- 數(shù)據(jù)源包含哪些SQL對象和這些對象的屬性
- 由數(shù)據(jù)源提供的事務(wù)支持
DatabaseMetadata 接口還包含超過40個字段医吊,這是用來作為各種 databasemetadata 方法返回值
本章提出的databasemetadata接口的概述,舉例說明元數(shù)據(jù)方法的分類贾陷,并介紹了一些新的方法缘眶。然而,對于一個全面的列表髓废,讀者應(yīng)該參考JDBC API規(guī)范
Note – 注–JDBC定義結(jié)果集元數(shù)據(jù)接口巷懈,會在第十五章 "結(jié)果集" 進(jìn)行討論
7.1 創(chuàng)建一個databasemetadata對象
一個 databasemetadata 對象由連接方法 getmetadata 創(chuàng)建。一旦創(chuàng)建慌洪,它就可以被用來動態(tài)地發(fā)現(xiàn)底層數(shù)據(jù)源的信息砸喻。代碼示例7-1創(chuàng)建一個databasemetadata對象。
DatabaseMetaData dbmd = con.getMetadata();
int maxLen = dbmd.getMaxTableNameLength();
7.2 通用信息檢索
一些databasemetadata方法用于動態(tài)地發(fā)現(xiàn)數(shù)據(jù)源的一般信息蒋譬,以及一些關(guān)于它的實(shí)現(xiàn)細(xì)節(jié)。這一類中的這方法是
- getURL
- getUserName
- getDatabaseProductVersion, getDriverMajorVersion and getDriverMinorVersion
- getSchemaTerm, getCatalogTerm and getProcedureTerm
- nullsAreSortedHigh and nullsAreSortedLow
- usesLocalFiles and usesLocalFilePerTable
- getSQLKeywords
7.3 確定功能支持
一大組 databasemetadata 方法可以用來確定一個特定的功能或功能集是由 Driver 或底層數(shù)據(jù)源支持愉适。除此之外犯助,一些方法描述了提供何種級別的支持。對單個特征支持的描述 的一些方法是:
- supportsaltertablewithdropcolumn
- supportsBatchUpdates
- supportsPositionedDelete
- supportsFullOuterJoins
- supportsStoredProcedures
- supportsMixedCaseQuotedIdentifiers
描述功能支持級別的方法包括:
- supportsANSI92EntryLevelSQL
- supportsCoreSQLGrammar
7.4 數(shù)據(jù)源的限制
這一組方法提供了給定數(shù)據(jù)源所施加的限制维咸。這一類中的一些方法是:
- getMaxRowSize
- getMaxStatementLength
- getMaxTablesInSelect
- getMaxConnections
- getMaxCharLiteralLength
- getMaxColumnsInTable
這個組中的方法返回一個int類型的值剂买,表示沒有限制或限制是未知的
7.5 SQL對象及其屬性
一些databasemetadata方法提供SQL對象的信息對于一個給定的數(shù)據(jù)源,還包括確定這些對象屬性的方法癌蓖,這一類的例子是:
- getSchemas
- getCatalogs
- getTables
- getPrimaryKeys
- getProcedures
- getProcedureColumns
- getUDTs
- getFunctions
- getFunctionColumns
這是從一個databasemetadata方法返回ResultSet對象具有敏感性type_forward_only和并發(fā)concur_read_only瞬哼。resultset.getholdability來確定返回的ResultSet對象的保持能力作為默認(rèn)的保持能力是實(shí)現(xiàn)定義
附加的列以外的列定義為通過對給定的方法返回的ResultSet對象可以通過JDBC驅(qū)動程序廠商定義的,必須由他們的列標(biāo)簽的訪問租副。這使得未來的JDBC規(guī)范能夠如果需要現(xiàn)有的databasemetadata方法沒有顯著影響現(xiàn)有的應(yīng)用程序添加額外的列
7.6 事務(wù)支持
一小部分方法提供有關(guān)數(shù)據(jù)源支持的事務(wù)語義的信息坐慰。這一類的例子包括
- supportsMultipleTransactions
- getDefaultTransactionIsolation
7.7 新的方法
JDBC 4.2 API提供了以下新的databasemetadata方法:
- supportsRefCursors
- getMaxLogicalLobSize
7.8 已更新的方法
JDBC 4.2 API修改現(xiàn)有的databasemetadata方法的定義:
- getIndexInfo
以前返回CARDINALITY 和 PAGES 列現(xiàn)在返回一個long 類型的值
JDBC 4.2 API規(guī)范包括這些方法的更新定義。