TimesTenデータベース接続の管理

TimesTenを使用してデータベース接続を管理できます。

この項で説明する操作は、level1サンプル・アプリケーションに基づいています。「TimesTenクイック・スタートおよびサンプル・アプリケーションについて」を参照してください。

TimesTenでのDSNについて

DSN (データ・ソース名)は、TimesTenデータベースおよびそのデータベースに接続するための接続属性セットのユーザーを識別する論理名です。作成するDSNのタイプは、アプリケーションがデータベースに直接接続するか、クライアントから接続するかによって異なります。

TimesTen Scaleoutの場合、DSNはグリッドに定義されているすべての接続属性において自動的に使用可能になります。データベース作成方法、および直接接続またはクライアント/サーバー接続の使用によるデータベースへの接続方法については、『Oracle TimesTen In-Memory Database Scaleoutユーザーズ・ガイド』TimesTen Scaleoutの概要を参照してください。データベースの作成およびデータベースへの接続を参照してください。

TimesTen Classicについては、『Oracle TimesTen In-Memory Databaseオペレーション・ガイド』を参照してください。データベースに直接接続するには、TimesTen Classicの場合のLinuxおよびUNIXでのDSNの作成の説明に従ってDSNを作成します。データベースへのクライアント接続を作成するには、WindowsでのクライアントDSNの作成および構成またはLinuxおよびUNIXでのクライアントDSNの作成および構成の説明に従ってDSNを作成します。

DSNを作成すると、アプリケーションはデータベースに接続できます。次の項では、JDBC直接ドライバまたはJDBCクライアント・ドライバを使用して、データベースへのJDBC接続を作成する方法について説明します。

接続でのJavaラッパー機能の使用

TimesTenでは、標準のjava.sql.Wrapper機能を介してTimesTen固有の実装を公開します。

Wrapperを使用してTimesTenConnectionインタフェースを実装する接続オブジェクトを取得し、TimesTen固有の機能にアクセスできるようにできます。次の例では、TimesTenConnectionオブジェクトを返し、それからTimesTenの拡張であるsetReplicationTrack()メソッドを呼び出しています。

String databaseUrl = null;
...
Connection conn = DriverManager.getConnection(databaseUrl);
If (conn.isWrapperFor(TimesTenConnection.class) ) {
  TimesTenConnection tconn = conn.unwrap(TimesTenConnection.class);
  tconn.setReplicationTrack(4);
}
...

データベースの接続URLの作成および接続属性の指定

JDBC接続を作成するには、データベースのTimesTen接続URLを指定します。TimesTen接続URLの形式は、次のとおりです。

jdbc:timesten:{direct|client}:dsn=DSNname;[DSNattributes;]

デフォルトはdirectです。

たとえば、サンプル・データベースへの直接接続を次のように作成します。

String URL = "jdbc:timesten:direct:dsn=sampledb";

接続URLに属性を指定して、DSNの記述に接続属性をプログラム的に設定または上書きすることができます。

『Oracle TimesTen In-Memory Databaseオペレーション・ガイド』データ・マネージャのDSNまたはサーバーのDSNの接続属性を参照してください。

一般的な接続属性に特別な権限は必要ありません。データベースが最初にロードされたときに、最初の接続属性が設定された後、すべての接続で有効になります。インスタンス管理者のみが、データベースをロードして最初の接続属性の設定を変更できます。『Oracle TimesTen In-Memory Databaseリファレンス』接続属性を参照してください。

たとえば、LockLevelの一般的な接続属性を1に設定するには、次のようにURLを作成します。

String URL = "jdbc:timesten:direct:dsn=sampledb;LockLevel=1";

データベースへの接続

URLを定義したら、DriverManagerまたはTimesTenDataSourceのいずれかのgetConnection()メソッドを使用し、データベースに接続します。

DriverManager.getConnection()メソッドを使用する場合は、データベースに接続するドライバURLを指定します。

import java.sql.*;
...
Connection conn = DriverManager.getConnection(URL);

TimesTenDataSourceメソッドgetConnection()を使用するには、まずデータ・ソースを作成します。次に、TimesTenDataSourceメソッドsetUrl()を使用してURLを設定し、getConnection()を使用して接続します。

import com.timesten.jdbc.TimesTenDataSource;
import java.sql.*;
...

TimesTenDataSource ds = new TimesTenDataSource();
ds.setUrl("jdbc:timesten:direct:<dsn>");
Connection conn = ds.getConnection();

TimesTenユーザー名およびパスワードは、setUrl()コールのURLのDSNに設定できますが、これを別に設定したり、Oracle Databaseパスワードを設定する(該当する場合)TimesTenDataSourceメソッドもあります。

TimesTenDataSource ds = new TimesTenDataSource();
ds.setUser(myttusername);                    // User name to log in to TimesTen
ds.setPassword(ttpassword);                  // Password to log in to TimesTen
ds.setUrl("jdbc:timesten:direct:<dsn>");
ds.setOraclePassword(oraclepassword);        // Password to log in to Oracle DB
Connection conn = ds.getConnection();

DriverManager.getConnection()メソッドまたはds.getConnection()メソッドのいずれかによって、データベースへのハンドルとして利用できるConnectionオブジェクト(この例ではconn)が返されます。DriverManagerメソッドgetConnection()の使用例についてはlevel1サンプル・アプリケーションを、TimesTenDataSourceメソッドgetConnection()の使用例についてはlevel2およびlevel3サンプル・アプリケーションを参照してください。「TimesTenクイック・スタートおよびサンプル・アプリケーションについて」を参照してください。

データベースからの切断

データベースにアクセスする必要がなくなった場合、通常はConnectionメソッドclose()をコールし、データベースへの接続をクローズします。

TimesTen接続はまた、標準のabort()メソッドに加え、java.lang.AutoCloseableを使用した標準のtry-with-resource機能もサポートしています。

エラーが発生した場合は、データベースから切断する前に、トランザクションをロールバックできます。「致命的ではないエラー」および「失敗したトランザクションのロールバック」を参照してください。

直接接続のオープンおよびクローズ

この例では、サンプル・データベースへの直接接続を作成し、いくつかのSQLを実行し、その後接続をクローズするためにDriverManagerクラスを使用するアプリケーションの一般的なフレームワークを示します。

実際の例については、level1サンプル・アプリケーションを参照してください。(サンプル・アプリケーションについては、「TimesTenクイック・スタートおよびサンプル・アプリケーションについて」を参照してください。)

String URL = "jdbc:timesten:dsn=sampledb";
Connection conn = null;

try {
     Class.forName("com.timesten.jdbc.TimesTenDriver");
} catch (ClassNotFoundException ex) {
      // See Error Handling
}

try {
    // Open a connection to TimesTen
    conn = DriverManager.getConnection(URL);

    // Report any SQLWarnings on the connection
    // See Reporting Errors and Warnings

    // Do SQL operations
    // See TimesTen Features and Operations in Your Application below

    // Close the connection to TimesTen
    conn.close();

// Handle any errors
} catch (SQLException ex) {
    // See Error Handling
}

データベースの妥当性の確認

アプリケーションでこのTimesTenConnectionメソッドをコールしてデータベースが有効であるかどうかを検出できます。

boolean isDataStoreValid() throws java.sql.SQLException

データベースが妥当な場合にはtrueが返され、システムまたはアプリケーションの障害などによりデータベースが無効な場合にはfalseが返されます。