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は以下の(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にのみ以下のように接続タイムアウトが設定されます。
前述した設定のほか、接続時には次の情報も設定できます。
| タイムゾーン(Z | ±HH:MM | ±HHMM) |
※タイムゾーン処理を行う場合、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に下記のキーでプロパティを追加してください。
| INTERNAL(内部認証) | LDAP(LDAP認証) |
| PREFERRED(クラスタ設定に従う) | DISABLED(無効) |
本章では、GridDB JDBCドライバの仕様について示します。主に、ドライバのサポート範囲ならびにJDBC標準との相違点について説明します。 特記事項がなくJDBC標準に準拠しているAPIの仕様については、JDKのAPIリファレンスを参照してください。将来のバージョンでは、特に次の点が変更される可能性があります。
JDBC4.1の一部機能に対応し、次の機能はサポートされません。
JDBC仕様の通り、Connectionオブジェクトなどclose()メソッドを持つオブジェクトに対し、isClosed()以外のメソッドを呼び出すと、SQLExceptionが発生します。 エラー名はJDBC_ALREADY_CLOSEDとなります。
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 エラーコード』を参照してください。
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を返すメソッドの中で、サポートしているメソッドは以下の通りです。 これら以外の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() | カラムのデータ型一覧を返します |
上記のメソッドをそれぞれ説明します。
ResultSet getColumns(String catalog, String schemaPattern, String tableNamePattern, String columnNamePattern)
実行結果のResultSetが持つカラムは以下の通りです。
| カラム名 | 型 | 値 |
|---|---|---|
| TABLE_CAT | String | null |
| TABLE_SCHEM | String | null |
| TABLE_NAME | String | テーブル名 |
| COLUMN_NAME | String | カラム名 |
| DATA_TYPE | int | カラムのデータ型の値(下記の表を参照) |
| TYPE_NAME | String | カラムのデータ型の名前(下記の表を参照) |
| COLUMN_SIZE | int | 131072 |
| BUFFER_LENGTH | int | 2000000000 |
| DECIMAL_DIGITS | int | 10 |
| NUM_PREC_RADIX | int | 10 |
| NULLABLE | int | PRIMARY KEYまたはNOT NULL制約があるカラムは 0 (定数DatabaseMetaData.columnNoNullsの値) それ以外は 1 (定数DatabaseMetaData.columnNullableの値) |
| REMARKS | String | null |
| COLUMN_DEF | String | null |
| SQL_DATA_TYPE | int | 0 |
| SQL_DATETIME_SUB | int | 0 |
| CHAR_OCTET_LENGTH | int | 2000000000 |
| ORDINAL_POSITION | int | カラムの番号(1からの連番) |
| IS_NULLABLE | String | NOT NULL制約。PRIMARY KEYまたはNOT NULL制約があるカラムは’NO’ それ以外は’YES’ |
| SCOPE_CATALOG | String | null |
| SCOPE_SCHEMA | String | null |
| SCOPE_TABLE | String | null |
| SOURCE_DATA_TYPE | short | 0 |
| IS_AUTOINCREMENT | String | ‘NO’ |
| IS_GENERATEDCOLUMN | String | ‘NO’ |
該当カラムのデータ型に応じて、次のTYPE_NAMEとDATA_TYPEの値の組合せを返します。
| カラムのデータ型 | TYPE_NAMEの値 | DATA_TYPEの値 |
|---|---|---|
| BOOL型 | ‘BOOL’ | -7 (Types.BIT) |
| STRING型 | ‘STRING’ | 12 (Types.VARCHAR) |
| BYTE型 | ‘BYTE’ | -6 (Types.TINYINT) |
| SHORT型 | ‘SHORT’ | 5 (Types.SMALLINT) |
| INTEGER型 | ‘INTEGER’ | 4 (Types.INTEGER) |
| LONG型 | ‘LONG’ | -5 (Types.BIGINT) |
| FLOAT型 | ‘FLOAT’ | 6 (Types.FLOAT) |
| DOUBLE型 | ‘DOUBLE’ | 8 (Types.DOUBLE) |
| TIMESTAMP型 | ‘TIMESTAMP’ | 93 (Types.TIMESTAMP) |
| BLOB型 | ‘BLOB’ | 2004 (Types.BLOB) |
| GEOMETRY型 | ‘GEOMETRY’ | 1111 (Types.OTHER) |
| BOOL型の配列型 | ‘BOOL_ARRAY’ | 1111 (Types.OTHER) |
| STRING型の配列型 | ‘STRING_ARRAY’ | 1111 (Types.OTHER) |
| BYTE型の配列型 | ‘BYTE_ARRAY’ | 1111 (Types.OTHER) |
| SHORT型の配列型 | ‘SHORT_ARRAY’ | 1111 (Types.OTHER) |
| INTEGER型の配列型 | ‘INTEGER_ARRAY’ | 1111 (Types.OTHER) |
| LONG型の配列型 | ‘LONG_ARRAY’ | 1111 (Types.OTHER) |
| FLOAT型の配列型 | ‘FLOAT_ARRAY’ | 1111 (Types.OTHER) |
| DOUBLE型の配列型 | ‘DOUBLE_ARRAY’ | 1111 (Types.OTHER) |
| TIMESTAMP型の配列型 | ‘TIMESTAMP_ARRAY’ | 1111 (Types.OTHER) |
ResultSet getIndexInfo(String catalog, String schema, String table, boolean unique, boolean approximate)
実行結果のResultSetが持つカラムは以下の通りです。
| カラム名 | 型 | 値 |
|---|---|---|
| TABLE_CAT | String | null |
| TABLE_SCHEM | String | null |
| TABLE_NAME | String | テーブル名 |
| NON_UNIQUE | boolean | true |
| INDEX_QUALIFIER | String | null |
| INDEX_NAME | String | 索引名 |
| TYPE | short | 2(ハッシュ索引を表す定数DatabaseMetaData.tableIndexHashedの値) または 3(ハッシュ以外の索引を表す定数DatabaseMetaData.tableIndexOtherの値) |
| ORDINAL_POSITION | short | 1から開始 |
| COLUMN_NAME | String | カラム名 |
| ASC_OR_DESC | String | null |
| CARDINALITY | long | 0 |
| PAGES | long | 0 |
| FILTER_CONDITION | String | null |
ResultSet getPrimaryKeys(String catalog, String schema, String table)
実行結果のResultSetが持つカラムは以下の通りです。
| カラム名 | 型 | 値 |
|---|---|---|
| TABLE_CAT | String | null |
| TABLE_SCHEM | String | null |
| TABLE_NAME | String | テーブル名 |
| COLUMN_NAME | String | カラム名 |
| KEY_SEQ | short | 1 |
| PK_NAME | String | null |
ResultSet getTables(String catalog, String schemaPattern, String tableNamePattern, String[] types)
実行結果のResultSetが持つカラムは以下の通りです。
| カラム名 | 型 | 値 |
|---|---|---|
| TABLE_CAT | String | null |
| TABLE_SCHEM | String | null |
| TABLE_NAME | String | テーブル名 |
| TABLE_TYPE | String | ‘TABLE’または’VIEW’ |
| REMARKS | String | null |
| TYPE_CAT | String | null |
| TYPE_SCHEM | String | null |
| TYPE_NAME | String | null |
| SELF_REFERENCING_COL_NAME | String | null |
| REF_GENERATION | String | null |
ResultSet getTableTypes()
実行結果のResultSetが持つカラムは以下の通りです。
| カラム名 | 型 | 値 |
|---|---|---|
| TABLE_TYPE | String | ‘TABLE’または’VIEW’ |
ResultSet getTypeInfo()
全ての型で共通の情報、型別の情報は以下の通りです。
| カラム名 | 型 | 値 |
|---|---|---|
| TYPE_NAME | String | データ型の名前(下記の表を参照) |
| DATA_TYPE | int | データ型の値(下記の表を参照) |
| PRECISION | int | 0 |
| LITERAL_PREFIX | String | null |
| LITERAL_SUFFIX | String | null |
| CREATE_PARAMS | String | null |
| NULLABLE | short | 1 (このデータ型でNULL値が許可されることを表す定数DatabaseMetaData.typeNullableの値) |
| CASE_SENSITIVE | boolean | true |
| SEARCHABLE | short | 3 (このデータ型をWHERE節で使用できることを表す定数DatabaseMetaData.typeSearchableの値) |
| UNSIGNED_ATTRIBUTE | boolean | false |
| FIXED_PREC_SCALE | boolean | false |
| AUTO_INCREMENT | boolean | false |
| LOCAL_TYPE_NAME | String | null |
| MINIMUM_SCALE | short | 0 |
| MAXIMUM_SCALE | short | 0 |
| SQL_DATA_TYPE | int | 0 |
| SQL_DATETIME_SUB | int | 0 |
| NUM_PREC_RADIX | int | 10 |
カラムTYPE_NAME、DATA_TYPEは、以下の組合せの値が全て返ります。
| TYPE_NAMEの値 | DATA_TYPEの値 |
|---|---|
| ‘BOOL’ | -7 (Types.BIT) |
| ‘STRING’ | 12 (Types.VARCHAR) |
| ‘BYTE’ | -6 (Types.TINYINT) |
| ‘SHORT’ | 5 (Types.SMALLINT) |
| ‘INTEGER’ | 4 (Types.INTEGER) |
| ‘LONG’ | -5 (Types.BIGINT) |
| ‘FLOAT’ | 6 (Types.FLOAT) |
| ‘DOUBLE’ | 8 (Types.DOUBLE) |
| ‘TIMESTAMP’ | 93 (Types.TIMESTAMP) |
| ‘BLOB’ | 2004 (Types.BLOB) |
| ‘UNKNOWN’ | 0 (Types.NULL) |
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のgetMaxRows()で得られるロウ数より超えないこともチェックします。 この値に関する制限は、JDBC4.0より前のJDBC仕様でのみ明記されていました。 ただし、以前のJDBC仕様とは異なり、getMaxRows()の結果がデフォルト値0に設定されている場合を除きます。
フェッチ方向の設定はFETCH_FORWARDのみをサポートします。FETCH_FORWARD以外が指定された場合、SQLExceptionが発生します。
以下のメソッドをサポートします。設定されていないパラメータがある状態でexecuteQueryなどクエリ実行APIを呼び出すと、SQLExceptionが発生します。
以下のメソッドをサポートします。
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の生成元の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 | ○ | ○ | ○ | ○ | ○ | ○ |
サポートされている型変換先の型と対応するメソッドより、カラムの値を取得できます。 カラムの指定方法としては、カラムラベルとカラムインデックスの両方をサポートします。 その他、次の機能を使用できます。
次のオプション機能は未サポートです。引数を省略しているものは、全てのオーバーロードが未サポートです。
検索結果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();
}
}
}