GridDB Advanced Edition JDBCドライバ説明書

Revision: 4.3.4-172

1 概要

JDBCパラメータのプログラムでの指定形式や使用できるデータ型、使用上の注意点を説明します。

 

1.1 接続方法

1.1.1 ドライバの指定

JDBCドライバファイル /usr/share/java/gridstore-jdbc.jar をクラスパスに追加します。これによりドライバが自動的に登録されます。 さらに必要に応じて、以下のようにしてドライバクラスを読み込みます。通常は不要です。

Class.forName("com.toshiba.mwcloud.gs.sql.Driver");

 

1.1.2 接続時のURL形式

URLは以下の(A)~(D)の形式となります。クラスタ構成方式がマルチキャスト方式の場合、通常は(A)の形式で接続してください。 GridDBクラスタ側で自動的に負荷分散が行われ適切なノードに接続されます。 GridDBクラスタとの間でマルチキャストでの通信ができない場合のみ、他の形式で接続してください。

(A)マルチキャスト方式のGridDBクラスタの適切なノードへ自動的に接続する場合

jdbc:gs://(multicastAddress):(portNo)/(clusterName)/(databaseName)

(B)マルチキャスト方式のGridDBクラスタ内のノードに直接接続する場合

jdbc:gs://(nodeAddress):(portNo)/(clusterName)/(databaseName)

(C)固定リスト方式のGridDBクラスタに接続する場合

クラスタ構成方式が固定リスト方式の場合、この形式で接続してください。

jdbc:gs:///(clusterName)/(databaseName)?notificationMember=(notificationMember)

※notificationMemberはgs_cluster.jsonファイルを編集することで変更可能です。 アドレスリストで使うポートは、gs_node.jsonファイルを編集することで変更可能です。

(D)プロバイダ方式のGridDBクラスタに接続する場合

クラスタ構成方式がプロバイダ方式の場合、この形式で接続してください。

jdbc:gs:///(clusterName)/(databaseName)?notificationProvider=(notificationProvider)

※notificationProviderはgs_cluster.jsonファイルを編集することで変更可能です。

なお、(A)~(D)いずれの場合でも、ユーザ名・パスワードをURLに含める場合は、URLの末尾に次のように追加してください。

?user=(ユーザ名)&password=(パスワード)

 

1.1.3 接続タイムアウトの設定

以下の(A)、(B)どちらかの方法で接続タイムアウトを設定できます。両方が設定された場合、(B)の設定が優先されます。 どちらも設定されない場合、デフォルト値300秒(5分)が使用されます。

(A)DriverManager#setLoginTimeout(int seconds)で指定する

secondsの値によって、以下のように設定されます。設定後、DriverManager#getConnectionまたはDriver#connectで取得する全てのGridDB AEへのConnectionに接続タイムアウトが設定されます。

(B)DriverManager#getConnection(String url, Properties info)またはDriver#connect(String url, Properties info)で指定する

引数infoにキー”loginTimeout”でプロパティを追加してください。キー”loginTimeout”に対応する値が数値に変換できた場合、取得したConnectionにのみ以下のように接続タイムアウトが設定されます。

 

1.1.4 その他情報の設定

前述した設定のほか、接続時には次の情報も設定できます。

※タイムゾーン処理を行う場合、GridDBからの取得コストが増えるため、極力アプリ側で処理を行うことを推奨します。

以下の(A)、(B)どちらかの方法でこれらは設定できます。両方が設定された場合はエラーとなります。

(A)URLで指定する

アプリケーション名をURLに含める場合は、URLの末尾に次のように追加してください。

?applicationName=(アプリケーション名)

タイムゾーンをURLに含める場合は、URLの末尾に次のように追加してください。

?timeZone=(タイムゾーン)

ユーザ名・パスワードもURLに含める場合は、次のように追加してください。

?user=(ユーザ名)&password=(パスワード)&applicationName=(アプリケーション名)&timeZone=(タイムゾーン)

タイムゾーンの記号「:」など、URLエンコードが必要なものは適宜実施してください。

(B)DriverManager#getConnection(String url, Properties info)またはDriver#connect(String url, Properties info)で指定する

引数infoに下記のキーでプロパティを追加してください。

1.2 注意点

 

2 仕様

本章では、GridDB AE JDBCドライバの仕様について示します。主に、ドライバのサポート範囲ならびにJDBC標準との相違点について説明します。 特記事項がなくJDBC標準に準拠しているAPIの仕様については、JDKのAPIリファレンスを参照してください。将来のバージョンでは、特に次の点が変更される可能性があります。

 

2.1 共通事項

2.1.1 サポートされるJDBCバージョン

JDBC4.1の一部機能に対応し、次の機能はサポートされません。

2.1.2 エラー処理

2.1.2.1 未サポート機能の使用

2.1.2.2 クローズ済みのオブジェクトに対するメソッド呼び出し

JDBC仕様の通り、Connectionオブジェクトなどclose()メソッドを持つオブジェクトに対し、isClosed()以外のメソッドを呼び出すと、SQLExceptionが発生します。 エラー名はJDBC_ALREADY_CLOSEDとなります。

2.1.2.3 不正なnull引数

APIのメソッド引数として、nullが許容されないにも関わらず指定された場合、JDBC_EMPTY_PARAMETERエラーからなるSQLExceptionが発生します。JDBC仕様または本書で明示的にnullの受け入れを明記している引数以外は、nullを許容しません。

2.1.2.4 複数のエラー原因がある場合

複数のエラー原因がある場合は、いずれかのエラーを検知した時点でアプリケーションに制御が戻ります。特に、未サポート機能を使用しようとした場合のエラーは、他のエラーよりも先に検知します。たとえば、クローズ済みのConnectionオブジェクトに対してストアドプロシージャを作成しようとした場合は、クローズされていることではなく、未サポートであることを示すエラーが返ります。

2.1.2.5 例外の内容

ドライバよりスローされるチェック例外は、SQLExceptionもしくはSQLExceptionのサブクラスのインスタンスからなります。 例外の詳細を取得するには、次のメソッドを使用します。

2.1.2.6 エラー一覧

ドライバ内部で検出される主なエラーの一覧は次の通りです。

エラー番号 エラーコード名 エラー説明の書式
(別記) JDBC_NOT_SUPPORTED Currently not supported
(別記) JDBC_OPTIONAL_FEATURE_NOT_SUPPORTED Optional feature not supported
(別記) JDBC_EMPTY_PARAMETER The parameter (引数名) must not be null
(別記) JDBC_ALREADY_CLOSED Already closed
(別記) JDBC_COLUMN_INDEX_OUT_OF_RANGE Column index out of range
(別記) JDBC_VALUE_TYPE_CONVERSION_FAILED Failed to convert value type
(別記) JDBC_UNWRAPPING_NOT_SUPPORTED Unwrapping interface not supported
(別記) JDBC_ILLEGAL_PARAMETER Illegal value: (引数名)
(別記) JDBC_UNSUPPORTED_PARAMETER_VALUE Unsupported (パラメータ名)
(別記) JDBC_ILLEGAL_STATE Protocol error occurred
(別記) JDBC_INVALID_CURSOR_POSITION Invalid cursor position
(別記) JDBC_STATEMENT_CATEGORY_UNMATCHED Writable query specified for read only request Read only query specified for writable request
(別記) JDBC_MESSAGE_CORRUPTED Protocol error

エラーの発生源となる元のエラーがある場合などは、上記のエラー説明の末尾に追加の詳細メッセージが追加されることがあります。この他のエラーは『GridDB エラーコード』(GridDB_ErrorCodes.html)を参照してください。 

2.2 API仕様詳細

2.2.1 Connectionインターフェース

Connectionインターフェースの各メソッドについて説明します。 特に説明のない限り、Connectionがクローズされていない場合の説明のみを記載します。

2.2.1.1 トランザクション制御

トランザクション制御では、自動コミットモードのみのためコミット/ロールバックはサポートしません。ただし、トランザクションを使用するアプリケーションにおいても疑似的に動作するよう、コミットやロールバックを実行された場合は要求を無視します。 SQLFeatureNotSupportedExceptionは発生しません。

トランザクション分離レベルは、TRANSACTION_READ_COMMITTEDのみサポートします。他のレベルは設定できません。

JDBC仕様との相違があるメソッド

メソッド 内容 JDBC仕様との相違点
void commit() コミットします。 自動コミットモードのみのため、コミット要求を無視します。
void rollback() ロールバックします。 自動コミットモードのみのため、ロールバック要求を無視します。
void setAutoCommit(boolean autoCommit) コミットモードを設定します。 自動コミットモードのみのため、モードの設定はできません。autoCommitを無視して常にtrueを設定します。

一部未サポートのメソッド

メソッド 内容 一部未サポートの点
Statement createStatement(int resultSetType, int resultSetConcurrency) ステートメントを作成します。 resultSetTypeはResultSet.TYPE_FORWARD_ONLYのみ、resultSetConcurrencyはResultSet.CONCUR_READ_ONLYのみサポートします。それ以外の値を設定すると、SQLFeatureNotSupportedExceptionが発生します。
Statement createStatement(int resultSetType, int resultSetConcurrency, int resultSetHoldability) ステートメントを作成します。 resultSetTypeはResultSet.TYPE_FORWARD_ONLYのみ、resultSetConcurrencyはResultSet.CONCUR_READ_ONLYのみ、resultSetHoldabilityはResultSet.CLOSE_CURSORS_AT_COMMITのみサポートします。それ以外の値を設定すると、SQLFeatureNotSupportedExceptionが発生します。
PreparedStatement prepareStatement(String sql, int resultSetType, int resultSetConcurrency) プリペアードステートメントを作成します。 resultSetTypeはResultSet.TYPE_FORWARD_ONLYのみ、resultSetConcurrencyはResultSet.CONCUR_READ_ONLYのみサポートします。それ以外の値を設定すると、SQLFeatureNotSupportedExceptionが発生します。
PreparedStatement prepareStatement(String sql, int resultSetType, int resultSetConcurrency, int resultSetHoldability) プリペアードステートメントを作成します。 resultSetTypeはResultSet.TYPE_FORWARD_ONLYのみ、resultSetConcurrencyはResultSet.CONCUR_READ_ONLYのみ、resultSetHoldabilityはResultSet.CLOSE_CURSORS_AT_COMMITのみサポートします。それ以外の値を設定すると、SQLFeatureNotSupportedExceptionが発生します。
void setTransactionIsolation(int level) トランザクション分離レベルを設定します。 levelには、Connection.TRANSACTION_READ_COMMITTEDしか指定できません。それ以外の値を設定するとSQLExceptionが発生します。

サポートしているメソッド

メソッド 内容
void close() Connectionをクローズします。
Statement createStatement() ステートメントを作成します。
boolean getAutoCommit() コミットモードを取得します。
DatabaseMetaData getMetaData() DatabaseMetaDataを取得します。
int getTransactionIsolation() トランザクション分離レベルを取得します。
boolean isClosed() Connectionがクローズされているかを取得します。
PreparedStatement prepareStatement(String sql) プリペアードステートメントを作成します。

2.2.1.2 属性の設定・取得

トランザクション制御のメソッド以外で、属性の設定や取得を行うメソッドについて説明します。

JDBC仕様との相違があるメソッド

メソッド 内容 JDBC仕様との相違点
void setReadOnly(boolean readOnly) Connectionオブジェクトの読み込み専用モードを設定します。 readOnlyを無視して、常にfalseを設定します。

一部未サポートのメソッド

メソッド 内容 一部未サポートの点
void setHoldability(int holdability) ResultSetオブジェクトの保持機能を設定します。 holdabilityにはResultSet.CLOSE_CURSORS_AT_COMMITしか指定できません。それ以外の値を設定すると、SQLFeatureNotSupportedExceptionが発生します。

サポートしているメソッド

メソッド 内容
int getHoldability() ResultSetオブジェクトの保持機能を取得します。
boolean isReadOnly() Connectionオブジェクトが読み込み専用モードかどうかを取得します。
boolean isValid(int timeout) 接続の状態を取得します。

2.2.1.3 未サポートの機能

Connectionインターフェースの中で、未サポートのメソッド一覧を示します。実行すると、SQLFeatureNotSupportedExceptionが発生します。

 

2.2.2 DatabaseMetaDataインターフェース

テーブルのメタデータを取得するDatabaseMetaDataインターフェースについて説明します。

2.2.2.1 ResultSetを返す属性

DatabaseMetaDataインターフェースで、実行結果としてResultSetを返すメソッドの中で、サポートしているメソッドは以下の通りです。これら以外のResultSetを返すメソッドは未サポートです。

メソッド 内容
ResultSet getColumns(String catalog, String schemaPattern, String tableNamePattern, String columnNamePattern) テーブルのカラム情報を返します
ResultSet getIndexInfo(String catalog, String schema, String table, boolean unique, boolean approximate) テーブルの索引情報を返します
ResultSet getPrimaryKeys(String catalog, String schema, String table) テーブルのロウキーの情報を返します
ResultSet getTables(String catalog, String schemaPattern, String tableNamePattern, String[] types) テーブルの一覧を返します
ResultSet getTableTypes() テーブルの型を返します
ResultSet getTypeInfo() カラムのデータ型一覧を返します

上記のメソッドをそれぞれ説明します。

2.2.2.1.1 DatabaseMetaData.getColumns
ResultSet getColumns(String catalog, String schemaPattern, String tableNamePattern, String columnNamePattern)

 

2.2.2.1.2 DatabaseMetaData.getIndexInfo
ResultSet getIndexInfo(String catalog, String schema, String table, boolean unique, boolean approximate)

 

2.2.2.1.3 DatabaseMetaData.getPrimaryKeys
ResultSet getPrimaryKeys(String catalog, String schema, String table)

 

2.2.2.1.4 DatabaseMetaData.getTables
ResultSet getTables(String catalog, String schemaPattern, String tableNamePattern, String[] types)

 

2.2.2.1.5 DatabaseMetaData.getTableTypes
ResultSet getTableTypes()

 

2.2.2.1.6 DatabaseMetaData.getTypeInfo()
ResultSet getTypeInfo()

 

2.2.2.2 単純値を返すメソッド

DatabaseMetaDataインターフェースのメソッドの中で、実行結果としてint型やString型などの単純値を返すメソッドについて、実行結果の一覧を示します。

メソッド 結果
allProceduresAreCallable() false
allTablesAreSelectable() true
autoCommitFailureClosesAllResultSets() false
dataDefinitionCausesTransactionCommit() false
dataDefinitionIgnoredInTransactions() true
deletesAreDetected(type) false
doesMaxRowSizeIncludeBlobs() false
generatedKeyAlwaysReturned() false
getCatalogSeparator() "."
getCatalogTerm() "catalog"
getDefaultTransactionIsolation() TRANSACTION_READ_COMMITTED
getExtraNameCharacters() . - / = (順不同)
getIdentifierQuoteString() "
getMaxBinaryLiteralLength() 0
getMaxCatalogNameLength() 0
getMaxCharLiteralLength() 0
getMaxColumnNameLength() 0
getMaxColumnsInGroupBy() 0
getMaxColumnsInIndex() 0
getMaxColumnsInOrderBy() 0
getMaxColumnsInSelect() 0
getMaxColumnsInTable() 0
getMaxConnections() 0
getMaxCursorNameLength() 0
getMaxIndexLength() 0
getMaxSchemaNameLength() 0
getMaxProcedureNameLength() 0
getMaxRowSize() 0
getMaxStatementLength() 0
getMaxStatements() 0
getMaxTableNameLength() 0
getMaxTablesInSelect() 0
getMaxUserNameLength() 0
getProcedureTerm() "procedure"
getResultSetHoldability() CLOSE_CURSORS_AT_COMMIT
getRowIdLifetime() true
getSchemaTerm() "schema"
getSearchStringEscape() "
getSQLKeywords() ""
getSQLStateType() sqlStateSQL99
getStringFunctions() ""
getSystemFunctions() ""
getURL() null
getUserName() (ユーザ名)
insertsAreDetected(type) false
isCatalogAtStart() true
isReadOnly() false
locatorsUpdateCopy() false
nullPlusNonNullIsNull() true
nullsAreSortedAtEnd() false
nullsAreSortedAtStart() false
nullsAreSortedHigh() true
nullsAreSortedLow() false
othersDeletesAreVisible(type) false
othersInsertsAreVisible(type) false
othersUpdatesAreVisible(type) false
ownDeletesAreVisible(type) false
ownInsertsAreVisible(type) false
ownUpdatesAreVisible(type) false
storesLowerCaseIdentifiers() false
storesLowerCaseQuotedIdentifiers() false
storesMixedCaseIdentifiers() true
storesMixedCaseQuotedIdentifiers() false
storesUpperCaseIdentifiers() false
storesUpperCaseQuotedIdentifiers() false
supportsAlterTableWithAddColumn() false
supportsAlterTableWithDropColumn() false
supportsANSI92EntryLevelSQL() false
supportsANSI92FullSQL() false
supportsANSI92IntermediateSQL() false
supportsBatchUpdates() false
supportsCatalogsInDataManipulation() false
supportsCatalogsInIndexDefinitions() false
supportsCatalogsInPrivilegeDefinitions() false
supportsCatalogsInProcedureCalls() false
supportsCatalogsInTableDefinitions() false
supportsColumnAliasing() true
supportsConvert() false
supportsConvert(fromType, toType) false
supportsCoreSQLGrammar() true
supportsCorrelatedSubqueries() true
supportsDataDefinitionAndDataManipulationTransactions() false
supportsDataManipulationTransactionsOnly() false
supportsDifferentTableCorrelationNames() false
supportsExpressionsInOrderBy() true
supportsExtendedSQLGrammar() false
supportsFullOuterJoins() false
supportsGetGeneratedKeys() false
supportsGroupBy() true
supportsGroupByBeyondSelect() true
supportsGroupByUnrelated() true
supportsIntegrityEnhancementFacility() false
supportsLikeEscapeClause() true
supportsLimitedOuterJoins() true
supportsMinimumSQLGrammar() true
supportsMixedCaseIdentifiers() false
supportsMixedCaseQuotedIdentifiers() true
supportsMultipleOpenResults() false
supportsMultipleResultSets() false
supportsMultipleTransactions() false
supportsNamedParameters() false
supportsNonNullableColumns() true
supportsOpenCursorsAcrossCommit() false
supportsOpenCursorsAcrossRollback() false
supportsOpenStatementsAcrossCommit() false
supportsOpenStatementsAcrossRollback() false
supportsOrderByUnrelated() true
supportsOuterJoins() true
supportsPositionedDelete() false
supportsPositionedUpdate() false
supportsResultSetConcurrency(type, concurrency) typeがTYPE_FORWARD_ONLY、concurrencyがCONCUR_READ_ONLYの場合のみ
supportsResultSetHoldability(holdability) CLOSE_CURSORS_AT_COMMITの場合のみ
supportsResultSetType() TYPE_FORWARD_ONLYの場合のみ
supportsSavepoints() false
supportsSchemasInDataManipulation() false
supportsSchemasInIndexDefinitions() false
supportsSchemasInPrivilegeDefinitions() false
supportsSchemasInProcedureCalls() false
supportsSchemasInTableDefinitions() false
supportsSelectForUpdate() false
supportsStatementPooling() false
supportsStoredFunctionsUsingCallSyntax() false
supportsStoredProcedures() false
supportsSubqueriesInComparisons() false
supportsSubqueriesInExists() true
supportsSubqueriesInIns() true
supportsSubqueriesInQuantifieds() false
supportsTableCorrelationNames() false
supportsTransactionIsolationLevel(level) TRANSACTION_READ_COMMITTEDの場合のみ
supportsTransactions() true
supportsUnion() true
supportsUnionAll() true
updatesAreDetected(type) false
usesLocalFilePerTable() false
usesLocalFiles() false

2.2.2.3 未サポートのメソッド

DatabaseMetaDataインターフェースのメソッドの中で、未サポートのメソッド一覧を示します。実行するとSQLFeatureNotSupportedExceptionは発生せず、以下の結果が返ります。

メソッド 結果
ResultSet getAttributes(String catalog, String schemaPattern, String typeNamePattern, String attributeNamePattern) 空のResultSet
ResultSet getBestRowIdentifier(String catalog, String schema, String table, int scope, boolean nullable) 空のResultSet
ResultSet getCatalogs() 空のResultSet
ResultSet getClientInfoProperties() 空のResultSet
ResultSet getColumnPrivileges(String catalog, String schema, String table, String columnNamePattern) 空のResultSet
ResultSet getCrossReference(String parentCatalog, String parentSchema, String parentTable, String foreignCatalog, String foreignSchema, String foreignTable) 空のResultSet
ResultSet getExportedKeys(String catalog, String schema, String table) 空のResultSet
ResultSet getFunctionColumns(String catalog, String schemaPattern, String functionNamePattern, String columnNamePattern) 空のResultSet
ResultSet getFunctions(String catalog, String schemaPattern, String functionNamePattern) 空のResultSet
ResultSet getImportedKeys(String catalog, String schema, String table) 空のResultSet
ResultSet getProcedureColumns(String catalog, String schemaPattern, String procedureNamePattern, String columnNamePattern) 空のResultSet
ResultSet getProcedures(String catalog, String schemaPattern, String procedureNamePattern) 空のResultSet
ResultSet getPseudoColumns(String catalog, String schemaPattern, String tableNamePattern, String columnNamePattern) 空のResultSet
ResultSet getSchemas() 空のResultSet
ResultSet getSchemas(String catalog, String schemaPattern) 空のResultSet
ResultSet getSuperTables(String catalog, String schemaPattern, String tableNamePattern) 空のResultSet
ResultSet getSuperTypes(String catalog, String schemaPattern, String typeNamePattern) 空のResultSet
ResultSet getTablePrivileges(String catalog, String schemaPattern, String tableNamePattern) 空のResultSet
ResultSet getUDTs(String catalog, String schemaPattern, String typeNamePattern, int[] types) 空のResultSet
ResultSet getVersionColumns(String catalog, String schema, String table) 空のResultSet

 

2.2.3 Statementインターフェース

2.2.3.1 フェッチサイズの設定・取得

指定された値のチェックのみ行います。

値のチェックでは、このStatementのgetMaxRows()で得られるロウ数より超えないこともチェックします。 この値に関する制限は、JDBC4.0より前のJDBC仕様でのみ明記されていました。 ただし、以前のJDBC仕様とは異なり、getMaxRows()の結果がデフォルト値0に設定されている場合を除きます。

2.2.3.2 フェッチ方向の設定・取得

フェッチ方向の設定はFETCH_FORWARDのみをサポートします。FETCH_FORWARD以外が指定された場合、SQLExceptionが発生します。

2.2.3.3 未サポートの機能

 

2.2.4 PreparedStatementインターフェース

2.2.4.1 パラメータの設定・取得

以下のメソッドをサポートします。設定されていないパラメータがある状態でexecuteQueryなどクエリ実行APIを呼び出すと、SQLExceptionが発生します。

2.2.4.2 SQLの実行

以下のメソッドをサポートします。

2.2.4.3 未サポートの機能

 

2.2.5 ParameterMetaDataインターフェース

PreparedStatementのメタデータを取得するParameterMetaDataインターフェースについて説明します。

JDBC仕様の全てのメソッドをサポートしますが、以下のメソッドは引数paramの値によらず常に固定の値を返します。

メソッド 結果
int getParameterType(int param) Types.OTHER
String getParameterTypeName(int param) "UNKNOWN"
int getPrecision(int param) 0
int getScale(int param) 0
boolean isSigned(int param) false

 

2.2.6 ResultSetインターフェース

2.2.6.1 フェッチサイズの設定・取得

指定された値のチェックのみ行い、設定の変更は実際のフェッチ処理には影響しません。 値のチェックでは、対象のResultSetの生成元のStatementのgetMaxRows()で得られるロウ数より超えないこともチェックします。 この制限は、JDBC4.0より前のJDBC仕様でのみ明記されていました。ただし、以前のJDBC仕様とは異なり、getMaxRows()の結果がデフォルト値0に設定されている場合を除きます。実際のフェッチ処理には影響しませんが、変更した設定値を取得できます。

2.2.6.2 フェッチ方向の設定・取得

フェッチ方向の設定はFETCH_FORWARDのみをサポートします。FETCH_FORWARD以外が指定された場合、 SQLExceptionが発生します。この挙動はJDBC仕様とは異なります。

2.2.6.3 カーソル情報の取得

カーソルに関する以下のメソッドをサポートします。

フェッチ方向はFETCH_FORWARDのみをサポートしているため、次のメソッドを呼び出すとFETCH_FORWARDタイプのResultSetに対する呼び出しを原因とするSQLExceptionが発生します。

2.2.6.4 警告の管理

警告は記録されないため、警告を管理するメソッドの挙動は次のようになります。

メソッド 挙動
getWarnings() nullを返却
clearWarnings() 警告はクリアされない

2.2.6.5 固定値を返す属性

ResultSetがオープンされている間、常に固定の値を返すメソッドのサポート状況は次の通りです。

メソッド 結果
getCursorName() nullを返却
getType() TYPE_FORWARD_ONLYを返却
getConcurrency() CONCUR_READ_ONLYを返却
getMetaData() (JDBC準拠)
getStatement() (JDBC準拠)

2.2.6.6 型変換

指定のカラムの値を取得する際、ResultSetが保持する型と求める型とが異なる場合は、次の組み合わせに限り、型変換を試みます。

変換先のJava型 BOOL INTEGRAL ※1 FLOATING ※2 TIMESTAMP STRING BLOB
boolean ○ ※3 ○ ※4
byte
short
int
long
float
double
byte[]
java.sql.Date ○ ※5
Time ○ ※5
Timestamp ○ ※5
String ○ ※6 ○ ※7
Blob ○ ※7
Object

2.2.6.7 カラムの値取得

サポートされている型変換先の型と対応するメソッドより、カラムの値を取得できます。 カラムの指定方法としては、カラムラベルとカラムインデックスの両方をサポートします。 その他、次の機能を使用できます。

2.2.6.8 エラー処理

2.2.6.9 未サポートの機能

次のオプション機能は未サポートです。引数を省略しているものは、全てのオーバーロードが未サポートです。

 

2.2.7 ResultSetMetaDataインターフェース

検索結果ResultSetのメタデータを取得するResultSetMetaDataインターフェースについて説明します。

ResultSetMetaDataインターフェースのJDBC仕様の全メソッドについて、以下の分類で各メソッドの内容や実行結果などを説明します。

2.2.7.1 カラムの型

ResultSetMetaDataインターフェースには、検索結果ResultSetのカラムのデータ型を返すメソッドがあります。

メソッド 内容
String getColumnClassName(int column) 指定されたカラムのデータ型のクラス名を返します。
int getColumnType(int column) 指定されたカラムのデータ型の値を返します。
String getColumnTypeName(int column) 指定されたカラムのデータ型の名前を返します。

カラムのデータ型と、それぞれのメソッドを実行した値との対応付けを以下に示します。

カラムのデータ型 getColumnClassName getColumnType getColumnTypeName
BOOL型 "java.lang.Boolean" Types.BIT "BOOL"
STRING型 "java.lang.String" Types.VARCHAR "STRING"
BYTE型 "java.lang.Byte" Types.TINYINT "BYTE"
SHORT型 "java.lang.Short" Types.SMALLINT "SHORT"
INTEGER型 "java.lang.Integer" Types.INTEGER "INTEGER"
LONG型 "java.lang.Long" Types.BIGINT "LONG"
FLOAT型 "java.lang.Float" Types.FLOAT "FLOAT"
DOUBLE型 "java.lang.Double" Types.DOUBLE "DOUBLE"
TIMESTAMP型 "java.util.Date" Types.TIMESTAMP "TIMESTAMP"
BLOB型 "java.sql.Blob" Types.BLOB "BLOB"
GEOMETRY型 "java.lang.Object" Types.OTHER "UNKNOWN"
配列型 "java.lang.Object" Types.OTHER "UNKNOWN"
カラムのデータ型を特定できない場合(※1) "java.lang.Object" Types.OTHER "UNKNOWN"

[メモ]

2.2.7.2 単純値を返す属性

ResultSetMetaDataインターフェースで、カラムのデータ型を返す以外のメソッドの実行結果を以下に示します。

メソッド 結果
String getCatalogName(int column) ""
int getColumnCount() カラムの数
int getColumnDisplaySize(int column) 131072
String getColumnLabel(int column) カラムのラベル名
String getColumnName(int column) カラムの名前
int getPrecision(int column) 0
int getScale(int column) 0
String getSchemaName(int column) ""
String getTableName(int column) ""
boolean isAutoIncrement(int column) false
boolean isCaseSensitive(int column) true
boolean isCurrency(int column) false
boolean isDefinitelyWritable(int column) true
int isNullable(int column) カラムにNULL値を許可する定数ResultSetMetaData.columnNullable(=1)、またはカラムにNULL値を許可しない定数columnNoNulls(=0)
boolean isReadOnly(int column) false
boolean isSearchable(int column) true
boolean isSigned(int column) false
boolean isWritable(int column) true

2.2.7.3 未サポートの機能

ResultSetMetaDataインターフェースで未サポートのメソッド(SQLFeatureNotSupportedExceptionが発生するメソッド)はありません。

 

3 サンプル

JDBCのサンプルプログラムは以下のとおりです。

// sample2が実行されている必要があります。
package test;

import java.sql.*;

public class SampleJDBC {
    public static void main(String[] args) throws SQLException {
        if (args.length != 5) {
            System.err.println(
                "usage: java SampleJDBC (multicastAddress) (port) (clusterName) (user) (password)");
            System.exit(1);
        }

        // urlは"jdbc:gs://(multicastAddress):(portNo)/(clusterName)"形式
        String url = "jdbc:gs://" + args[0] + ":" + args[1] + "/" + args[2];
        String user = args[3];
        String password = args[4];

        System.out.println("DB Connection Start");

        // GridDBクラスタとの接続
        Connection con = DriverManager.getConnection(url, user, password);
        try {
            System.out.println("Start");
            Statement st = con.createStatement();
            ResultSet rs = st.executeQuery("SELECT * FROM point01");
            ResultSetMetaData md = rs.getMetaData();
            while (rs.next()) {
                for (int i = 0; i < md.getColumnCount(); i++) {
                    System.out.print(rs.getString(i + 1) + "|");
                }
                System.out.println("");
            }
            rs.close();
            System.out.println("End");
            st.close();
        } finally {
            System.out.println("DB Connection Close");
            con.close();
        }
    }
}