griddb.github.io

概要

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

 

接続方法

ドライバの指定

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

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

また、SSL機能を利用してGridDBクラスタとクライアントの通信を保護する場合には、 /usr/share/java/gridstore-advanced.jarも追加でクラスパスに指定してください。  

接続時の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=(パスワード)

 

接続タイムアウトの設定

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

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

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

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

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

 

その他情報の設定

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

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

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

(A)URLで指定する

GridDBクラスタとの認証は、クラスタ側の設定に従って、内部認証(INTERNAL)、もしくはLDAP認証(LDAP)を利用します。接続時に認証方式を指定する場合には、URLに次のように追加してください。

?authentication=(INTERNAL|LDAP)

GridDBクラスタとの通信をSSLによって保護します。PREFERRED(クラスタ設定に従う) 、VERIFY(SSL有効、サーバ証明書検証実施) 、DISABLED(無効)が選択できます。URLに次のように追記してください。

?sslMode=(PREFERRED|VERIFY|DISABLED)

※LDAP認証を利用する場合、SSL通信を無効にすることは非推奨です。

※SSL通信設定(sslMode)をVERIFYに設定する場合、GridDBクラスタ側の設定も必要です。詳細は、『GridDB 機能リファレンス』の「通信の暗号化」を参照してください。また、信頼する認証局の証明書がトラストストアになければ、keytoolコマンドを使ってインポートしてください。必要な場合は、java起動時の引数で、トラストストア(-Djavax.net.ssl.trustStore)、パスワード(-Djavax.net.ssl.trustStorePassword)を指定してください。信頼する認証局の証明書の有効期限切れ確認は未サポートです。

複数のネットワークインターフェースがあるときにクラスタのネットワーク構成をマルチキャスト方式にする場合は、マルチキャストパケットを受信するインターフェースのアドレスが指定できます。URLに次のように追加して下さい。

?notificationNetworkInferfaceAddress=(マルチキャストパケットを受信するインターフェースのアドレス)

アプリケーション名を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に下記のキーでプロパティを追加してください。

注意点

 

仕様

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

 

共通事項

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

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

エラー処理

未サポート機能の使用

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

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

不正なnull引数

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

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

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

例外の内容

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

エラー一覧

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

エラー番号 エラーコード名 エラー説明の書式
(別記) 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 エラーコード』を参照してください。  

API仕様詳細

Connectionインターフェース

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

トランザクション制御

トランザクション制御では、自動コミットモードのみのためコミット/ロールバックはサポートしません。 ただし、トランザクションを使用するアプリケーションにおいても疑似的に動作するよう、コミットやロールバックを実行された場合は要求を無視します。 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) プリペアードステートメントを作成します。

属性の設定・取得

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

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) 接続の状態を取得します。

未サポートの機能

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

 

DatabaseMetaDataインターフェース

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

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() カラムのデータ型一覧を返します

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

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

 

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

 

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

 

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

 

DatabaseMetaData.getTableTypes
ResultSet getTableTypes()

 

DatabaseMetaData.getTypeInfo()
ResultSet getTypeInfo()

 

単純値を返すメソッド

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  

未サポートのメソッド

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

 

Statementインターフェース

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

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

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

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

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

未サポートの機能

 

PreparedStatementインターフェース

パラメータの設定・取得

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

SQLの実行

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

未サポートの機能

 

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

 

ResultSetインターフェース

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

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

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

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

カーソル情報の取得

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

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

警告の管理

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

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

固定値を返す属性

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

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

型変換

指定のカラムの値を取得する際、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

カラムの値取得

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

エラー処理

未サポートの機能

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

 

ResultSetMetaDataインターフェース

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

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

カラムの型

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”

[メモ]

単純値を返す属性

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

未サポートの機能

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

 

サンプル

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();
		}
	}
}