本文へジャンプ

GridDB JDBCドライバ説明書

Revision: 5.2.0-746

1 概要

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

 

1.1 接続方法

1.1.1 ドライバの指定

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

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

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

1.1.2 接続時のURL形式

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クラスタに接続する場合

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

jdbc:gs:///(clusterName)/(databaseName)?notificationProvider=(notificationProvider)
  • clusterName:GridDBクラスタのクラスタ名
  • databaseName:データベース名。省略した場合はデフォルトデータベースに接続します
  • notificationProvider:アドレスプロバイダのURL(URLエンコードが必要)

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

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

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

 

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

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

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

secondsの値によって、以下のように設定されます。設定後、DriverManager#getConnectionまたはDriver#connectで取得する全てのGridDBへの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より大きい場合
    • 設定されません

 

1.1.4 その他情報の設定

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

  • 認証方式
  • SSL通信の設定
  • 外部通信経路指定
  • マルチキャスト受信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 機能リファレンス』(GridDB_FeaturesReference.html)の「通信の暗号化」を参照してください。また、信頼する認証局の証明書がトラストストアになければ、keytoolコマンドを使ってインポートしてください。必要な場合は、java起動時の引数で、トラストストア(-Djavax.net.ssl.trustStore)、パスワード(-Djavax.net.ssl.trustStorePassword)を指定してください。信頼する認証局の証明書の有効期限切れ確認は未サポートです。

外部通信経路を用いた接続を行うにはURLに次のように追加してください。指定はPUBLICのみ有効となります。

?connectionRoute=PUBLIC

※外部通信経路を用いた接続を行うにはGridDBクラスタ側の設定も必要です。詳細は、『GridDB 機能リファレンス』(GridDB_FeaturesReference.html)の「クライアント通信経路」を参照してください。

複数のネットワークインターフェースがあるときにクラスタのネットワーク構成をマルチキャスト方式にする場合は、マルチキャストパケットを受信するインターフェースのアドレスが指定できます。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
    • タイムゾーン

1.2 注意点

  • 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インタフェースによるデフォルト設定での操作とは異なります。

 

2 仕様

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

  • JDBC標準に準拠していない挙動
  • 未サポートの機能のサポート状況
  • エラーメッセージ

 

2.1 共通事項

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

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

  • トランザクション制御
  • ストアドプロシージャ
  • バッチ実行

2.1.2 エラー処理

2.1.2.1 未サポート機能の使用

  • 標準機能
    • JDBC仕様に準拠したドライバがサポートすべき標準機能のうち、本ドライバにおいて現状サポートされていない機能を使用した場合、SQLFeatureNotSupportedExceptionが発生します。この挙動は、本来のSQLFeatureNotSupportedExceptionの仕様とは異なります。エラー名(後述)はJDBC_NOT_SUPPORTEDとなります。
  • オプション機能
    • JDBC仕様においてオプション機能に位置付けられており、SQLFeatureNotSupportedExceptionが発生する可能性のある機能のうち、本ドライバにおいてサポートされていない機能を使用した場合、JDBC仕様通りSQLFeatureNotSupportedExceptionが発生します。エラー名はJDBC_OPTIONAL_FEATURE_NOT_SUPPORTEDとなります。

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

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

2.1.2.3 不正なnull引数

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

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

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

2.1.2.5 例外の内容

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

  • getErrorCode()
    • サーバ・クライアントのいずれかでGridDBが検知したエラーについて、エラー番号を返却します。具体的な番号やその原因については、『GridDB エラーコード』(GridDB_ErrorCodes.html)を参照してください。
  • getSQLState()
    • 少なくともドライバ内で検知したエラー(エラーコード:14xxxx)では、非nullの値を返却します。それ以外は未定義です。
  • getMessage()
    • エラー番号とエラーの説明を組にした、エラーメッセージを返却します。書式は次のようになります。

      [(エラー番号):(エラー名)] (エラーの説明)
      
    • エラー一覧と対応しない番号のエラーが発生した場合、エラーメッセージは次のようになります。

      (エラーの詳細)
      

2.1.2.6 エラー一覧

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

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

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

2.2 API仕様詳細

2.2.1 Connectionインターフェース

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

2.2.1.1 トランザクション制御

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

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

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

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

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

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

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

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

2.2.1.2 属性の設定・取得

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

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

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

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

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

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

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

2.2.1.3 未サポートの機能

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

  • 標準機能

    • 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)

 

2.2.2 DatabaseMetaDataインターフェース

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

2.2.2.1 ResultSetを返す属性

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

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

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

2.2.2.1.1 DatabaseMetaData.getColumns
ResultSet getColumns(String catalog, String schemaPattern, String tableNamePattern, String columnNamePattern)
  • 指定されたテーブル名のパターン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 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)
  • GEOMETRY型と配列型については、NoSQLインターフェースで作成された、これらのデータ型を持つテーブルの情報を取得した場合に値が返ります。JDBCでは、これらのデータ型を持つテーブルは作成できません。

 

2.2.2.1.2 DatabaseMetaData.getIndexInfo
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

 

2.2.2.1.3 DatabaseMetaData.getPrimaryKeys
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

 

2.2.2.1.4 DatabaseMetaData.getTables
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

 

2.2.2.1.5 DatabaseMetaData.getTableTypes
ResultSet getTableTypes()
  • テーブルのタイプを返します。結果は、カラム「TABLE_TYPE」に値'TABLE'または'VIEW'が格納された1件のみが返ります。

  • 実行結果のResultSetが持つカラムは以下の通りです。

    カラム名
    TABLE_TYPE String 'TABLE'または'VIEW'

 

2.2.2.1.6 DatabaseMetaData.getTypeInfo()
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)

 

2.2.2.2 単純値を返すメソッド

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

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

2.2.2.3 未サポートのメソッド

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

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

 

2.2.3 Statementインターフェース

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

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

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

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

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

2.2.3.3 未サポートの機能

  • バッチ処理
    • バッチ処理はサポートしません。以下の機能を使用しようとすると、未サポートの標準機能を使用した場合と同一のエラーが発生します。
      • addBatch(sql)
      • clearBatch()
      • executeBatch()
  • 標準機能
    • 以下のメソッドの呼び出しは無視されます。JDBC仕様とは異なります。
      • setEscapeProcessing(enable)
  • オプション機能
    • 以下のメソッドを呼び出すとSQLFeatureNotSupportedExceptionが発生します。
      • closeOnCompletion()
      • execute(sql, autoGeneratedKeys)
      • execute(sql, columnIndexes)
      • execute(sql, columnNames)
      • executeUpdate(sql, autoGeneratedKeys)
      • executeUpdate(sql, columnIndexes)
      • executeUpdate(sql, columnNames)
      • getGeneratedKeys()
      • getMoreResults(current)
      • isCloseOnCompletion()

 

2.2.4 PreparedStatementインターフェース

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

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

  • 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.util.Dateのサブクラスのオブジェクトを受け入れます。
  • setShort(int parameterIndex, short x)
  • setString(int parameterIndex, String x)
  • setTime(int parameterIndex, Time x)
  • setTimestamp(int parameterIndex, Timestamp x)

2.2.4.2 SQLの実行

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

  • execute()
  • executeQuery()
  • executeUpdate()

2.2.4.3 未サポートの機能

  • 標準機能
    • 以下のメソッドを呼び出すとSQLFeatureNotSupportedExceptionが発生します。この挙動はJDBC仕様とは異なります。
      • addBatch()
      • 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が発生します。引数を省略しているものは、全てのオーバーロードが未サポートです。
      • 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

 

2.2.5 ParameterMetaDataインターフェース

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

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

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

 

2.2.6 ResultSetインターフェース

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

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

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

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

2.2.6.3 カーソル情報の取得

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

  • isAfterLast()
  • isBeforeFirst()
  • isFirst()
  • isLast()
  • next()

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

  • absolute(row)
  • afterLast()
  • beforeFirst()
  • first()
  • last()
  • previous()
  • relative(rows)

2.2.6.4 警告の管理

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

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

2.2.6.5 固定値を返す属性

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

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

2.2.6.6 型変換

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

変換先のJava型 BOOL INTEGRAL ※1 FLOATING ※2 TIMESTAMP STRING BLOB
boolean ○ ※3 ○ ※4
byte
short
int
long
float
double
byte[]
java.sql.Date ○ ※5
Time ○ ※5
Timestamp ○ ※5
String ○ ※6 ○ ※7
Blob ○ ※7
Object
  • (※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」表現を受け付けます。
  • (※6). 接続時に指定したタイムゾーン情報が反映され、指定がない場合はUTCとなります。
  • (※7). 16進数バイナリ表現とみなして、文字列とBLOBを相互に変換します。ASCIIの大文字小文字は同一視します。それ以外は変換できずエラーとなります。

2.2.6.7 カラムの値取得

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

  • getBinaryStream
    • byte[]への型変換結果に相当します
  • wasNull
    • JDBC準拠

2.2.6.8 エラー処理

  • 不正なカラムインデックス
    • 不正なカラムインデックスを指定して値を取得しようとした場合、JDBC_COLUMN_INDEX_OUT_OF_RANGEエラーからなるSQLExceptionが発生します。
  • 型変換エラー
    • 型変換に失敗した場合、JDBC_VALUE_TYPE_CONVERSION_FAILEDエラーからなるSQLExceptionが発生します。

2.2.6.9 未サポートの機能

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

  • 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で始まる全メソッド

 

2.2.7 ResultSetMetaDataインターフェース

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

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

  • カラムのデータ型を返すメソッド
  • その他のメソッド
  • 未サポートのメソッド

2.2.7.1 カラムの型

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

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

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

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

[メモ]

  • (※1). 例えば「SELECT NULL」を実行して得られるResultSetのような場合
  • GEOMETRY型と配列型については、NoSQLインターフェースで作成された、これらのデータ型を持つテーブルを検索した場合に値が返ります。JDBCでは、これらのデータ型を持つテーブルは作成できません。

2.2.7.2 単純値を返す属性

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

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

2.2.7.3 未サポートの機能

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

 

3 サンプル

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

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

import java.sql.*;

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

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

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

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