Skip to main content

This is documentation for Caché & Ensemble. See the InterSystems IRIS version of this content.Opens in a new tab

For information on migrating to InterSystems IRISOpens in a new tab, see Why Migrate to InterSystems IRIS?

JDBC 接続の確立

この章では、Caché JDBC ドライバを使用して基本タスクを実行する Java コードの詳細な例を紹介します。

  • "接続のための CacheDataSource の使用法"CacheDataSource を使用してドライバをロードし、java.sql.Connection オブジェクトを作成する方法について説明します。このオブジェクトは Statement オブジェクトを作成するために使用されます。

  • "接続のための DriverManager の使用法" — 標準 DriverManager クラスを使用して接続を作成する方法について説明します。

  • "接続プールの使用法"CacheConnectionPoolDataSource クラスを使用して、Java クライアント・アプリケーション用の接続プールを制御する方法について説明します。

  • "JDBC 接続 URL の定義" — アクセス先のホスト・アドレス、ポート番号、およびネームスペースを指定する方法について説明します。Caché JDBC ドライバでは、その他にいくつかのパラメータも指定できます。

  • "Caché JDBC 接続プロパティ" — いくつかの標準接続プロパティを指定する方法について説明します。

接続のための CacheDataSource の使用法

com.intersys.jdbc.CacheDataSource を使用してドライバをロードした後、java.sql.Connection オブジェクトを作成します。これは、データベースに接続する推奨のメソッドで、Caché で完全にサポートされています。

Note:

以前のバージョンの JDBC では、接続する前にドライバをロードする必要がありました。以下はその例です。

   Class.forName ("com.intersys.jdbc.CacheDriver").newInstance();
   Connection dbconnection = DriverManager.getConnection(url,user,password);

JDBC バージョン 4.0 以降は、ドライバの自動ロードを使用します。これにより、DriverManager または CacheDataSource 用に Class.forName() を呼び出す必要がなくなります。

CacheDataSource: を使用する手順は以下のとおりです。

  1. java.sql パッケージおよび com.intersys.jdbc パッケージをインポートします。

    import java.sql.*;
    import com.intersys.jdbc.*;
    
  2. ドライバをロードしてから CacheDataSource を使用して接続を作成し、ユーザ名およびパスワードを指定します。

    try{
       CacheDataSource ds = new CacheDataSource();
       ds.setURL("jdbc:Cache://127.0.0.1:1972/Samples");
       ds.setUser("_system");
       ds.setPassword("SYS");
       Connection dbconnection = ds.getConnection();
    }
    
    Note:

    URL でリテラル・アドレス 127.0.0.1 ではなく localhost を使用している場合、一部のシステムでは Java が IPv6 を経由して接続しようとする場合があります。この動作は、ホスト名が IPv4 と IPv6 を同じものであると解釈するシステムにおいて発生します。

  3. 作成した接続を使用して java.sql.Statement を作成します。Statement オブジェクトは、クエリの実行に使用できます。

    Statement stmt = dbconnection.createStatement()
    
  4. 上記メソッドによってスローされた例外を検出します。

    catch (SQLException e){
    System.out.println(e.getMessage());
    }
    catch (ClassNotFoundException e){
    System.out.println(e.getMessage());
    }
    

接続のための DriverManager の使用法

標準 DriverManager クラスは、接続を作成するためにも使用できます。以下のコードは、その方法の一例です。

   Class.forName ("com.intersys.jdbc.CacheDriver").newInstance();
   String  url="jdbc:Cache://127.0.0.1:1972/SAMPLES";
   String  username = "_SYSTEM";
   String  password = "SYS";
   dbconnection = DriverManager.getConnection(url,username,password);

以下のコードに示すように、接続プロパティを Properties オブジェクト内の DriverManager に渡すこともできます。

   String  url="jdbc:Cache://127.0.0.1:1972/SAMPLES";
   java.sql.Driver drv = java.sql.DriverManager.getDriver(url);

   java.util.Properties props = new Properties();
   props.put("user",username);
   props.put("password",password);
   java.sql.Connection dbconnection = drv.connect(url, props);

Caché JDBC ドライバが使用するプロパティの完全なリストは、"Caché JDBC 接続プロパティ" を参照してください。

JDBC 接続 URL の定義

java.sql.Connection URL は、アクセス先のホスト・アドレス、ポート番号、およびネームスペースに関する情報を持つ接続を提供します。Caché JDBC ドライバでは、いくつかのオプションのパラメータも使用できます。

必須パラメータ

URL は、アクセス先のホスト・アドレス、ポート番号、およびネームスペースを指定します。

host IP アドレス、または完全修飾されたドメイン名 (FQDN)。例えば、127.0.0.1localhost は両方ともローカル・マシンを表します。
port Caché スーパーサーバが待ち受け状態にある TCP ポート番号。既定は 1972 です (または、複数の Caché インスタンスがインストールされている場合、56772 以降で最初に使用可能な番号です。"Caché パラメータ・ファイル・リファレンス" の "DefaultPort" を参照)。
namespace アクセス先の Caché ネームスペース。例えば、Samples は、Caché のサンプル・プログラムが含まれているネームスペースです。

最小限必要な URL 構文は以下のとおりです。

   jdbc:Cache://<host>:<port>/<namespace>

例えば、以下の URL では、host127.0.0.1port1972namespaceSamples に指定されます。

   jdbc:Cache://127.0.0.1:1972/Samples

[オプションパラメータ]

Caché JDBC ドライバでは、いくつかのオプションのパラメータも指定できます。完全な構文は、以下のとおりです。

   jdbc:Cache://<host>:<port>/<namespace>/<logfile>:<eventclass>:<nodelay>:<ssl>

ここで、オプションのパラメータは以下のように定義されます。

logfile JDBC ログ・ファイルを指定します ("JDBC のログの有効化" を参照)。
eventclass この CacheDataSource オブジェクトにトランザクション・イベント・クラスを設定します。詳細な説明は、CacheDataSource setEventClass() メソッドを参照してください。
nodelay CacheDataSource オブジェクト経由で接続している場合に TCP_NODELAY オプションを設定します。このフラグを切り替えると、アプリケーションのパフォーマンスに影響する場合があります。有効な値は、true または false です。設定されていない場合、既定値として true が設定されます。CacheDataSourcegetNodelay() メソッドおよび setNodelay() メソッドも参照してください。
ssl CacheDriverCacheDataSource の両方で SSL/TLS を有効にします ("Caché セキュリティ管理ガイド" の “Caché での SSL/TLS の使用法” を参照)。有効な値は、true または false です。設定されていない場合、既定値として false が設定されます。

これらのオプションのパラメータは、他のパラメータを設定しなくても、それぞれ個別に定義できます。例えば、以下の URL は、必須のパラメータと nodelay オプションのみを設定します。

   jdbc:Cache://127.0.0.1:1972/Samples/::false

コマンド行でのポート・パラメータの設定

com.intersys.port プロパティを使用して、URL の port パラメータをコマンド行で設定できます。プログラムによりポート番号が接続文字列でハードコード化されている場合でも、コマンド行で変更できます。例えば、プログラム myJdbcProgram によりハードコード化された接続文字列でポート番号が 1972 に設定されていると想定します。以下のコマンド行は、ポート 9523 で引き続き実行できるようにします。

   java -cp .:../lib/cache-db-2.0.0.jar -Dcom.intersys.port=9523 myJdbcProgram

このプロパティの現在の値は、以下のコードを使用してプログラムで取得できます。

   String myport = java.lang.System.getProperty ("com.intersys.port");

代替ユーザ名およびパスワード・パラメータ

ユーザ名およびパスワードを指定する推奨方法は、この章の冒頭の “接続のための CacheDataSource の使用法” および “接続のための DriverManager の使用法” を参照してください。URL 文字列でユーザ名およびパスワードを指定することも可能ですが、お勧めしません。

パスワードおよびユーザ名が URL 文字列の一部として提供される場合、これらは接続用に使用されます。そうでない場合、既定の別のメカニズムが呼び出されます。構文は、以下のとおりです。

   jdbc:Cache://<host>:<port>/<namespace>/<options>?username=<string1>&password=<string2>

例えば、以下の URL 文字列は、必須のパラメータおよび nodelayオプションを設定した後、ユーザ名およびパスワードを設定します。

   "jdbc:Cache://127.0.0.1:1972/Samples/::false?username=_SYSTEM&password=SYS"

ユーザ名およびパスワードの文字列は、大文字と小文字を区別します。

接続プールの使用法

com.intersys.jdbc.CacheConnectionPoolDataSource クラスは、javax.sql.ConnectionPoolDataSource インタフェースを実装し、接続プールを Java クライアント・アプリケーションに提供します。

Note:

この実装は、テストおよび開発のみを目的としています。運用環境では使用しないでください。

Caché で接続プールを使用する手順は次のとおりです。

  1. 必要なパッケージをインポートします。

    import com.intersys.jdbc.*;
    import java.sql.*;
    
  2. CacheConnectionPoolDataSource オブジェクトをインスタンス化します。reStart() メソッドを使用して物理接続をすべて切断し、プールを空にします。setURL() を使用して、プールの接続にデータベース URL ("JDBC 接続 URL の定義" を参照) を設定します。

    CacheConnectionPoolDataSource pds = new CacheConnectionPoolDataSource();
       pds.restartConnectionPool();
       pds.setURL("jdbc:Cache://127.0.0.1:1972/Samples");
       pds.setUser("_system");
       pds.setPassword("SYS");
    
  3. 最初は、getPoolCount は 0 を返します。

    System.out.println(pds.getPoolCount()); //outputs 0.
    
  4. CacheConnectionPoolDataSource.getConnection() を使用して、プールからデータベース接続を取得します。

    Connection dbConnection = pds.getConnection();
    
    Caution:

    (CacheDataSource から継承された) getConnection() メソッドを呼び出して、常に Caché ドライバ接続を取得する必要があります。getPooledConnection() メソッドは使用しないでください。このメソッドは、Caché ドライバ内でのみ使用するためのものです。

  5. 接続を切断します。getPoolCount が 1 を返すようになります。

    dbConnection.close();
    System.out.println(pds.getPoolCount()); //outputs 1
    

Caché JDBC 接続プロパティ

Caché JDBC ドライバは、いくつかの接続プロパティをサポートします。これらは、プロパティを DriverManager に渡すことによって設定できます (詳細は、"接続のための DriverManager の使用法" を参照してください)。

以下のプロパティがサポートされています。

user 必須項目。ユーザ名を表す文字列です。既定値は "" です。
password 必須項目。パスワードを表す文字列です。既定値は "" です。
TCP_NODELAY オプション。TCP/IP の NoDelay フラグを表すブーリアン値です。既定値は true です。
SO_SNDBUF オプション。TCP/IP の SO_SNDBUF 値 (SendBufferSize) を表す整数です。既定値は 0 です (システムの既定値を使用)。
SO_RCVBUF オプション。TCP/IP の SO_RCVBUF 値 (ReceiveBufferSize) を表す整数です。既定値は 0 です (システムの既定値を使用)。
TransactionIsolationLevel オプション。トランザクションの分離レベルを表す java.sql.Connection 定数です。有効な値は、TRANSACTION_READ_UNCOMMITTED (既定) または TRANSACTION_READ_COMMITTED です。
service principal オプション。サービス・プリンシパル名を表す文字列です。既定値は null です。
connection security level オプション。接続セキュリティ・レベルを表す整数です。有効なレベルは、0123、または 10 です。既定は 0 です。

0 - Caché ログイン (パスワード)

1 - Kerberos (認証のみ)

2 - Kerberos パケット整合性

3 - Kerberos 暗号化

10 - SSL/TLS

接続プロパティのリスト

以下のコードに類似のコードを使用して、任意の JDBC 準拠のドライバに使用可能なプロパティをリストできます。

   java.sql.Driver drv = java.sql.DriverManager.getDriver(url);
   java.sql.Connection dbconnection = drv.connect(url, user, password);
   java.sql.DatabaseMetaData meta = dbconnection.getMetaData();

   System.out.println ("\n\n\nDriver Info: ==========================");
   System.out.println (meta.getDriverName());
   System.out.println ("release " + meta.getDriverVersion() + "\n");

   java.util.Properties props = new Properties();
   DriverPropertyInfo[] info = drv.getPropertyInfo(url,props);
   for(int i = 0; i < info.length; i++) {
      System.out.println ("\n" + info[i].name);
      if (info[i].required) {System.out.print ("   Required");}
         else {System.out.print ("   Optional");}
      System.out.println (", default = " + info[i].value);
      if (info[i].description != null) 
         System.out.println ("   Description: " + info[i].description);
      if (info[i].choices != null) {
         System.out.println ("   Valid values: ");
         for(int j = 0; j < info[i].choices.length; j++)
            System.out.println ("      " + info[i].choices[j]);
      }
   }

FeedbackOpens in a new tab