# 概要

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

# 接続方法

# ドライバの指定

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

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

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

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

以下の(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より大きい場合
    • 設定されません

# その他情報の設定

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

  • アプリケーション名
  • タイムゾーン(Z|±HH:MM|±HHMM)

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

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

# (A) URLで指定する

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

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