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