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)
- multicastAddress:GridDBクラスタとの接続に使うマルチキャストアドレス。(デフォルト: 239.0.0.1)
- portNo:GridDBクラスタとの接続に使うポート番号。(デフォルト: 41999)
- clusterName:GridDBクラスタのクラスタ名
- databaseName:データベース名。省略した場合はデフォルトデータベース(public)に接続します。
(B)マルチキャスト方式のGridDBクラスタ内のノードに直接接続する場合
jdbc:gs://(nodeAddress):(portNo)/(clusterName)/(databaseName)
- nodeAddress:ノードのアドレス
- portNo:ノードとの接続に使うポート番号。(デフォルト: 20001)
- clusterName:ノードが属するGridDBクラスタのクラスタ名
- databaseName:データベース名。省略した場合はデフォルトデータベース(public)に接続します。
(C)固定リスト方式のGridDBクラスタに接続する場合
クラスタ構成方式が固定リスト方式の場合、この形式で接続してください。
jdbc:gs:///(clusterName)/(databaseName)?notificationMember=(notificationMember)
- clusterName:GridDBクラスタのクラスタ名
- databaseName:データベース名。省略した場合はデフォルトデータベース(public)に接続します。
- notificationMember:ノードのアドレスリスト(URLエンコードが必要)。デフォルトポートは20001
- 例:192.168.0.10:20001,192.168.0.11:20001,192.168.0.12:20001
※notificationMemberはgs_cluster.jsonファイルを編集することで変更可能です。 アドレスリストで使うポートは、gs_node.jsonファイルを編集することで変更可能です。
(D)プロバイダ方式のGridDBクラスタに接続する場合【EE限定】
クラスタ構成方式がプロバイダ方式の場合、この形式で接続してください。
jdbc:gs:///(clusterName)/(databaseName)?notificationProvider=(notificationProvider)
- clusterName:GridDBクラスタのクラスタ名
- databaseName:データベース名。省略した場合はデフォルトデータベースに接続します
- notificationProvider:アドレスプロバイダのURL(URLエンコードが必要)
※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に接続タイムアウトが設定されます。
- 値が1~Integer.MAX_VALUEの設定値の場合
- 指定した秒数で設定されます
- 値がInteger.MIN_VALUEの設定値~0の場合
- 設定されません
(B)DriverManager#getConnection(String url, Properties info)またはDriver#connect(String url, Properties info)で指定する
引数infoにキー”loginTimeout”でプロパティを追加してください。キー”loginTimeout”に対応する値が数値に変換できた場合、取得したConnectionにのみ以下のように接続タイムアウトが設定されます。
- 変換した値が1~Integer.MAX_VALUEの場合
- 指定した秒数で設定されます
- 変換した値が0以下 または Integer.MAX_VALUEより大きい場合
- 設定されません
前述した設定のほか、接続時には次の情報も設定できます。
- 認証方式【EE限定】
- SSL通信の設定【EE限定】
- 外部通信経路指定
- マルチキャスト受信I/F指定
- アプリケーション名
- タイムゾーン(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に次のように追加してください。指定はPUBLICのみ有効となります。
?connectionRoute=PUBLIC
※外部通信経路を用いた接続を行うにはGridDBクラスタ側の設定も必要です。詳細は、『GridDB 機能リファレンス』の「クライアント通信経路」を参照してください。
複数のネットワークインターフェースがあるときにクラスタのネットワーク構成をマルチキャスト方式にする場合は、マルチキャストパケットを受信するインターフェースのアドレスが指定できます。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に下記のキーでプロパティを追加してください。
- 認証方式:authentication
- INTERNAL(内部認証) | LDAP(LDAP認証)
- SSL通信:sslMode
- PREFERRED(クラスタ設定に従う) | DISABLED(無効)
- 通信経路:connectionRoute
- PUBLIC(外部通信経路)
- マルチキャストパケットを受信するインターフェースアドレス:notificationNetworkInterfaceAddress
- IPアドレス
- アプリケーション名指定: applicationName
- アプリケーション名
- タイムゾーン: timeZone
- タイムゾーン
- NoSQLインタフェース/NewSQLインタフェースの違い
- NoSQLインタフェースのクライアントで作成したコンテナは、NewSQLインタフェースのJDBCドライバで参照、更新可能です。更新には行の更新だけでなく、コンテナのスキーマや索引の変更を含みます。
- NewSQLインタフェースのJDBCドライバで作成したテーブルは、NoSQLインタフェースのクライアントで参照、更新可能です。
- NoSQLインタフェースの場合は「コンテナ」、NewSQLインタフェースの場合は「テーブル」と呼びます。呼び方が異なるだけでどちらも同じオブジェクトを指します。
- NoSQLインタフェースのクライアントで作成した時系列コンテナを、JDBCドライバからSQLで検索した場合、NoSQLクライアントからTQLで検索した場合と異なり、主キーに対するORDER BY句がなければ結果は時刻順とはなりません。SQL結果の時刻順整列が必要な場合には主キーに対するORDER BYを指定してください。
- 一貫性について、インタフェースの違いによらず、トランザクションの分離レベルとしてREAD COMMITTEDをサポートしています。 NewSQLインタフェースによる検索・更新結果は、NoSQLインタフェースにて部分実行オプションを有効にしてTQLを実行した場合と同様、実行開始時点の単一のスナップショットに基づくとは限りません。 実行対象のデータ範囲に応じて分割された、個々の実行時点のスナップショットに基づく場合があります。 この特性は、パーティショニングされていない単一のテーブルに対する、NoSQLインタフェースによるデフォルト設定での操作とは異なります。
本章では、GridDB JDBCドライバの仕様について示します。主に、ドライバのサポート範囲ならびにJDBC標準との相違点について説明します。 特記事項がなくJDBC標準に準拠しているAPIの仕様については、JDKのAPIリファレンスを参照してください。将来のバージョンでは、特に次の点が変更される可能性があります。
- JDBC標準に準拠していない挙動
- 未サポートの機能のサポート状況
- エラーメッセージ
JDBC4.1の一部機能に対応し、次の機能はサポートされません。
- トランザクション制御
- ストアドプロシージャ
- バッチ実行(Statementインタフェース)
- 標準機能
- JDBC仕様に準拠したドライバがサポートすべき標準機能のうち、本ドライバにおいて現状サポートされていない機能を使用した場合、SQLFeatureNotSupportedExceptionが発生します。この挙動は、本来のSQLFeatureNotSupportedExceptionの仕様とは異なります。エラー名(後述)はJDBC_NOT_SUPPORTEDとなります。
- オプション機能
- JDBC仕様においてオプション機能に位置付けられており、SQLFeatureNotSupportedExceptionが発生する可能性のある機能のうち、本ドライバにおいてサポートされていない機能を使用した場合、JDBC仕様通りSQLFeatureNotSupportedExceptionが発生します。エラー名はJDBC_OPTIONAL_FEATURE_NOT_SUPPORTEDとなります。
JDBC仕様の通り、Connectionオブジェクトなどclose()メソッドを持つオブジェクトに対し、isClosed()以外のメソッドを呼び出すと、SQLExceptionが発生します。 エラー名はJDBC_ALREADY_CLOSEDとなります。
APIのメソッド引数として、nullが許容されないにも関わらず指定された場合、JDBC_EMPTY_PARAMETERエラーからなるSQLExceptionが発生します。JDBC仕様または本書で明示的にnullの受け入れを明記している引数以外は、nullを許容しません。
複数のエラー原因がある場合は、いずれかのエラーを検知した時点でアプリケーションに制御が戻ります。 特に、未サポート機能を使用しようとした場合のエラーは、他のエラーよりも先に検知します。 たとえば、クローズ済みのConnectionオブジェクトに対してストアドプロシージャを作成しようとした場合は、クローズされていることではなく、未サポートであることを示すエラーが返ります。
ドライバよりスローされるチェック例外は、SQLExceptionもしくはSQLExceptionのサブクラスのインスタンスからなります。 例外の詳細を取得するには、次のメソッドを使用します。
- getErrorCode()
- サーバ・クライアントのいずれかでGridDBが検知したエラーについて、エラー番号を返却します。
- getSQLState()
- 少なくともドライバ内で検知したエラー(エラーコード:14xxxx)では、非nullの値を返却します。それ以外は未定義です。
- getMessage()
-
エラー番号とエラーの説明を組にした、エラーメッセージを返却します。書式は次のようになります。
[(エラー番号):(エラー名)] (エラーの説明)
-
エラー一覧と対応しない番号のエラーが発生した場合、エラーメッセージは次のようになります。
(エラーの詳細)
-
ドライバ内部で検出される主なエラーの一覧は次の通りです。
エラー番号 | エラーコード名 | エラー説明の書式 |
---|---|---|
(別記) | 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 |
エラーの発生源となる元のエラーがある場合などは、上記のエラー説明の末尾に追加の詳細メッセージが追加されることがあります。
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が発生します。
-
標準機能
- CallableStatement prepareCall(String sql)
-
オプション機能
- void abort(Executor executor)
- Array createArrayOf(String typeName, Object[] elements)
- Blob createBlob()
- Clob createClob()
- NClob createNClob()
- SQLXML createSQLXML()
- Struct createStruct(String typeName, Object[] attributes)
- int getNetworkTimeout()
- String getSchema()
- Map<String,Class<?>> getTypeMap()
- CallableStatement prepareCall(String sql, int resultSetType, int resultSetConcurrency)
- CallableStatement prepareCall(String sql, int resultSetType, int resultSetConcurrency, int resultSetHoldability)
- PreparedStatement prepareStatement(String sql, int autoGeneratedKeys)
- PreparedStatement prepareStatement(String sql, int[] columnIndexes)
- PreparedStatement prepareStatement(String sql, String[] columnNames)
- void releaseSavepoint(Savepoint savepoint)
- void rollback(Savepoint savepoint)
- void setNetworkTimeout(Executor executor, int milliseconds)
- void setSavepoint()
- void setSchema(String schema)
- void setTypeMap(Map<String,Class<?>> map)
テーブルのメタデータを取得する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)
-
指定されたテーブル名のパターンtableNamePatternに一致するテーブルのカラム情報を返します。パターンに指定されたワイルドカード「%」は0文字以上の文字、「_」は任意の1文字に一致することを意味します。tableNamePatternにnullを指定した場合は全テーブルが対象になります。
-
他の絞り込み条件catalog, schemaPattern, 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 TIMESTAMP型の場合は精度に応じた小数秒の桁数(ミリ秒精度:3, マイクロ秒精度:6, ナノ秒精度:9)、他の型の場合はnull 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 TIMESTAMP型の場合は精度に応じた最大文字列長さ(ミリ秒精度:30,マイクロ秒精度:33,ナノ秒精度:36)、他の型の場合は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) -
GEOMETRY型と配列型については、NoSQLインターフェースで作成された、これらのデータ型を持つテーブルの情報を取得した場合に値が返ります。JDBCでは、これらのデータ型を持つテーブルは作成できません。
ResultSet getIndexInfo(String catalog, String schema, String table, boolean unique, boolean approximate)
-
指定されたテーブル名tableに一致するテーブルの索引情報を返します。指定された名前のテーブルが存在しない場合は、実行結果のResultSetは空が返ります。
-
uniqueにはfalseを指定してください。uniqueがfalse以外の場合、実行結果のResultSetは空が返ります。
-
他の絞り込み条件catalog、schemaと、パラメータ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)
-
指定されたテーブル名tableに一致するテーブルのロウキー情報を返します。指定された名前のテーブルが存在しない場合は、実行結果のResultSetは空が返ります。ただし、tableにnullを指定した場合は、ロウキーが設定されている全テーブルの情報が返ります。
-
他の絞り込み条件catalog, schemaは無視されます。
-
実行結果の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)
-
指定されたテーブル名のパターンtableNamePatternに一致するテーブルの情報を返します。パターンに指定されたワイルドカード「%」は0文字以上の文字、「_」は任意の1文字に一致することを意味します。tableNamePatternにnullを指定した場合は全テーブルが対象になります。
-
typesにはnullまたは文字列の配列を指定します。文字列要素は"TABLE"および"VIEW"が指定できます。typesに"TABLE"または"VIEW"と一致する要素が存在しなければ常に空の結果を返します。types内の文字列要素の大文字小文字表記の違いは無視されます。(typesは、テーブルの種別であるコレクション、時系列コンテナを表す値ではありません。)
-
他の絞り込み条件catalog, schemaPatternは無視されます。
-
実行結果の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()
-
テーブルのタイプを返します。結果は、カラム「TABLE_TYPE」に値'TABLE'または'VIEW'が格納された1件のみが返ります。
-
実行結果のResultSetが持つカラムは以下の通りです。
カラム名 型 値 TABLE_TYPE String 'TABLE'または'VIEW'
ResultSet getTypeInfo()
-
カラムのデータ型一覧を返します。
-
全ての型で共通の情報、型別の情報は以下の通りです。
カラム名 型 値 TYPE_NAME String データ型の名前(下記の表を参照) DATA_TYPE int データ型の値(下記の表を参照) PRECISION int TIMESTAMP型の場合は9(最大精度ナノ秒の小数部桁数)、他の型の場合は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が発生します。
- バッチ更新
- Statementインタフェースに対するバッチ更新はサポートしません。以下の機能を使用しようとすると、未サポートの標準機能を使用した場合と同一のエラーが発生します。
- addBatch()
- clearBatch()
- executeBatch()
- Statementインタフェースに対するバッチ更新はサポートしません。以下の機能を使用しようとすると、未サポートの標準機能を使用した場合と同一のエラーが発生します。
- 標準機能
- 以下のメソッドの呼び出しは無視されます。JDBC仕様とは異なります。
- setEscapeProcessing(enable)
- 以下のメソッドの呼び出しは無視されます。JDBC仕様とは異なります。
- オプション機能
- 以下のメソッドを呼び出すとSQLFeatureNotSupportedExceptionが発生します。
- closeOnCompletion()
- execute(sql, autoGeneratedKeys)
- execute(sql, columnIndexes)
- execute(sql, columnNames)
- executeUpdate(sql, autoGeneratedKeys)
- executeUpdate(sql, columnIndexes)
- executeUpdate(sql, columnNames)
- getGeneratedKeys()
- getMoreResults(current)
- isCloseOnCompletion()
- 以下のメソッドを呼び出すとSQLFeatureNotSupportedExceptionが発生します。
以下のメソッドをサポートします。設定されていないパラメータがある状態でexecuteQueryなどクエリ実行APIを呼び出すと、SQLExceptionが発生します。
- addBatch()
- clearBatch()
- executeBatch()
- ResultSetを含まないSQLに対してのみバッチ更新が可能であり、含む場合はエラーを返します。この場合エラーを返すタイミングはaddBatch()/clearBatch()ではなく、executeBatch()のタイミングとなります。また、対象SQLが複文となるケースもエラーとなります。
- clearParameters()
- getMetaData()
- getParameterMetaData()
- setBinaryStream(int parameterIndex, InputStream x)
- setBinaryStream(オーバーロード含む)では、クライアント側で入力データの数倍のメモリが必要になる可能性があります。実行時にメモリ不足になった場合はJVM起動時のヒープメモリサイズを調整してください。
- setBinaryStream(int parameterIndex, InputStream x, int length)
- setBinaryStream(int parameterIndex, InputStream x, long length)
- setBlob(int parameterIndex, Blob x)
- setBlob(オーバーロード含む)では、クライアント側で入力データの数倍のメモリが必要になる可能性があります。実行時にメモリ不足になった場合はJVM起動時のヒープメモリサイズを調整してください。
- setBlob(int parameterIndex, InputStream inputStream)
- setBlob(int parameterIndex, InputStream inputStream, long length)
- setBoolean(int parameterIndex, boolean x)
- setByte(int parameterIndex, byte x)
- setDate(int parameterIndex, Date x)
- setDouble(int parameterIndex, double x)
- setFloat(int parameterIndex, float x)
- setInt(int parameterIndex, int x)
- setLong(int parameterIndex, long x)
- setObject(int parameterIndex, Object x)
- TIMESTAMP型のパラメータに設定する値としては、java.sql.Timestampもしくはjava.util.Dateのサブクラスのオブジェクトを受け入れます。以下の対応関係となります。
- java.sql.Timestampの場合:ナノ秒精度TIMESTAMP型
- java.util.Dateの場合 :ミリ秒精度TIMESTAMP型
- setShort(int parameterIndex, short x)
- setString(int parameterIndex, String x)
- setTime(int parameterIndex, Time x)
- setTimestamp(int parameterIndex, Timestamp x)
- TIMESTAMP型のパラメータに設定する値としては、java.sql.Timestampもしくはjava.util.Dateのサブクラスのオブジェクトを受け入れます。以下の対応関係となります。
- java.sql.Timestampの場合:ナノ秒精度TIMESTAMP型
- java.util.Dateの場合 :ミリ秒精度TIMESTAMP型
以下のメソッドをサポートします。
- execute()
- executeQuery()
- executeUpdate()
- 標準機能
- 以下のメソッドを呼び出すとSQLFeatureNotSupportedExceptionが発生します。この挙動はJDBC仕様とは異なります。
- setBigDecimal(int parameterIndex, BigDecimal x)
- setDate(int parameterIndex, Date x, Calendar cal)
- setTime(int parameterIndex, Time x, Calendar cal)
- setTimestamp(int parameterIndex, Timestamp x, Calendar cal)
- 以下のメソッドを呼び出すとSQLFeatureNotSupportedExceptionが発生します。この挙動はJDBC仕様とは異なります。
- オプション機能
- 以下のメソッドを呼び出すとSQLFeatureNotSupportedExceptionが発生します。引数を省略しているものは、全てのオーバーロードが未サポートです。
- setArray
- setAsciiStream
- setBytes
- setCharacterStream
- setClob
- setNCharacterStream
- setNClob
- setNString
- setNull
- setObject(int parameterIndex, Object x, int targetSqlType)
- setObject(int parameterIndex, Object x, int targetSqlType, int scaleOrLength)
- setRef
- setRowId
- setSQLXML
- setUnicodeStream
- setURL
- 以下のメソッドを呼び出すとSQLFeatureNotSupportedExceptionが発生します。引数を省略しているものは、全てのオーバーロードが未サポートです。
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仕様とは異なります。
カーソルに関する以下のメソッドをサポートします。
- isAfterLast()
- isBeforeFirst()
- isFirst()
- isLast()
- next()
フェッチ方向はFETCH_FORWARDのみをサポートしているため、次のメソッドを呼び出すとFETCH_FORWARDタイプのResultSetに対する呼び出しを原因とするSQLExceptionが発生します。
- absolute(row)
- afterLast()
- beforeFirst()
- first()
- last()
- previous()
- relative(rows)
警告は記録されないため、警告を管理するメソッドの挙動は次のようになります。
メソッド | 挙動 |
---|---|
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 | ○ ※8 | ○ ※5 | ||||
String | ○ | ○ | ○ | ○ ※6 | ○ | ○ ※7 |
Blob | ○ ※7 | ○ | ||||
Object | ○ | ○ | ○ | ○ | ○ | ○ |
- (※1). INTEGRAL: BYTE/SHORT/INTEGER/LONGのいずれかを表します。
- (※2). FLOATING: FLOAT/DOUBLEのいずれかを表します。
- (※3). 変換元数値が0ならばfalseに、0以外ならばtrueに変換します。
- (※4). 変換元文字列が'false'ならばfalseに、'true'ならばtrueに変換します。ASCIIの大文字小文字は同一視します。それ以外は変換できずエラーとなります。
- (※5). 以下のルールで文字列表現の時刻を変換します。
- 表現をjava.text.SimpleDateFormatと同様のパターン文字列で表したものは以下のとおりです。ただしタイムゾーンを除きます。
- yyyy-MM-dd'T'HH:mm:ss.SSS
- yyyy-MM-dd'T'HH:mm:ss
- yyyy-MM-dd HH:mm:ss.SSS
- yyyy-MM-dd HH:mm:ss
- yyyy-MM-dd
- HH:mm:ss.SSS
- HH:mm:ss
- タイムゾーンについては、文字列に含まれるものが最優先で利用されます。次に、ResultSet#getTimeStamp()など取得APIの引数java.util.Calendarにおいてタイムゾーン指定があった場合はその内容を参照します。最後に接続時に指定したタイムゾーンが参照され、いずれも指定がない場合はUTC扱いとなります。タイムゾーン文字列としては、java.text.SimpleDateFormatの「z」または「Z」パターンで解釈できる表現のほか、UTCであることを示す「Z」表現を受け付けます。
- 表現をjava.text.SimpleDateFormatと同様のパターン文字列で表したものは以下のとおりです。ただしタイムゾーンを除きます。
- (※6). 接続時に指定したタイムゾーン情報が反映され、指定がない場合はUTCとなります。
- (※7). 16進数バイナリ表現とみなして、文字列とBLOBを相互に変換します。ASCIIの大文字小文字は同一視します。それ以外は変換できずエラーとなります。
- (※8). 精度の異なるTIMESTAMP型同士の変換は暗黙的に行われます。
サポートされている型変換先の型と対応するメソッドより、カラムの値を取得できます。 カラムの指定方法としては、カラムラベルとカラムインデックスの両方をサポートします。
カラム値の取得の際、TIMESTAMP型のカラムについては、精度に応じて以下のオブジェクトが取得されます。
- TIMESTAMP型(マイクロ秒精度,ナノ秒精度)の場合: java.sql.Timestampのオブジェクト
- TIMESTAMP型(ミリ秒精度)の場合: java.util.Dateのオブジェクト
その他、次の機能を使用できます。
- getBinaryStream
- byte[]への型変換結果に相当します
- wasNull
- JDBC準拠
- 不正なカラムインデックス
- 不正なカラムインデックスを指定して値を取得しようとした場合、JDBC_COLUMN_INDEX_OUT_OF_RANGEエラーからなるSQLExceptionが発生します。
- 型変換エラー
- 型変換に失敗した場合、JDBC_VALUE_TYPE_CONVERSION_FAILEDエラーからなるSQLExceptionが発生します。
次のオプション機能は未サポートです。引数を省略しているものは、全てのオーバーロードが未サポートです。
- cancelRowUpdates()
- getArray
- getAsciiStream
- getBigDecimal
- getClob
- getNClob
- getNCharacterStream
- getNString
- getObject(columnIndex, map)
- getObject(columnLabel, map)
- getObject(columnIndex, type)
- getObject(columnLabel, type)
- getRef
- getRow()
- getRowId
- getSQLXML
- getUnicodeStream
- getURL
- moveToInsertRow()
- moveToCurrentRow()
- refreshRow()
- rowInserted()
- rowDeleted()
- rowUpdated()
- insertで始まる全メソッド
- updateで始まる全メソッド
- deleteで始まる全メソッド
検索結果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" |
TIMESTAMP(3)型 | "java.util.Date" | Types.TIMESTAMP | "TIMESTAMP" |
TIMESTAMP(6)型 | "java.sql.Timestamp" | Types.TIMESTAMP | "TIMESTAMP" |
TIMESTAMP(9)型 | "java.sql.Timestamp" | 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" |
[メモ]
- (※1). 例えば「SELECT NULL」を実行して得られるResultSetのような場合
- GEOMETRY型と配列型については、NoSQLインターフェースで作成された、これらのデータ型を持つテーブルを検索した場合に値が返ります。JDBCでは、これらのデータ型を持つテーブルは作成できません。
ResultSetMetaDataインターフェースで、カラムのデータ型を返す以外のメソッドの実行結果を以下に示します。
メソッド | 結果 |
---|---|
String getCatalogName(int column) | "" |
int getColumnCount() | カラムの数 |
int getColumnDisplaySize(int column) | 131072 |
String getColumnLabel(int column) | カラムのラベル名 |
String getColumnName(int column) | カラムの名前 |
int getPrecision(int column) | TIMESTAMP型の場合は9(最大精度ナノ秒の小数部桁数)、他の型の場合は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();
}
}
}