6.2 JDBC Thinドライバを使用するサンプルJavaコード

JDBCメソッドは、JDBC Thinドライバを使用した次のJavaコードで示されています。

警告:

このコードは本番環境で使用しないでください。

この基本コードの中核はtest1関数にあり、次の処理を実行します:

  1. デフォルトのユーザー名とパスワード、またはプログラムの起動時にコマンドラインで指定された値を使用し、JDBC Thinドライバを使用してプライマリ・データベースへの接続を作成します。
  2. プライマリ・データベース接続に関するいくつかの基本情報を出力して、アプリケーションがデータベースに接続されていることを確認します。
  3. isReadOnly接続パラメータをTRUEに変更して、接続をTrue Cacheに自動的に切り替え、接続されていることを確認します。
import java.sql.*;
import java.io.*;
import java.util.*;
import java.util.logging.FileHandler;
import java.util.logging.Level;
import java.util.logging.Logger;

import oracle.jdbc.driver.OracleLog;
import oracle.jdbc.pool.OracleDataSource;

public class TrueCache {
  static String url_primary = "jdbc:oracle:thin:@primary_database_host:1521/SALES";
  static String user = "username";
  static String password = "password";

  public static void main(String args[]) {
    try {
      TrueCache t = new TrueCache();
      if(args != null && args.length >0 ) {
        url_primary = args[0];
        user = args[1];
        password = args[2];
      }
      t.test1();
    } catch (Exception e) {
      e.printStackTrace();
    }
  }

  public void test1() throws SQLException {
    show("Basic test to connect to primary and True Cache");
    try {
      show("Get Connection from True Cache instance using primary db and properties");
      OracleDataSource ods1 = new OracleDataSource();
      show("URL = " + url_primary);
      ods1.setURL(url_primary);
      ods1.setUser(user);
      ods1.setPassword(password);
      ods1.setConnectionProperty("oracle.jdbc.useTrueCacheDriverConnection", "true");

      Connection conn1 = ods1.getConnection();

      show("isReadonly " + conn1.isReadOnly());
      verifyConnection(conn1);  // This is connected to Primary
      
      conn1.setReadOnly(true);
      show("isReadonly " + conn1.isReadOnly());
      verifyConnection(conn1); // This is connected to True Cache

      conn1.close();
    } catch (SQLException sqex) {
      show("test1 -- failed" + sqex.getMessage()+":"+sqex.getCause());
      sqex.printStackTrace();
    }
    show("The end");
  }

  public void verifyConnection(Connection conn) {
    try {
      Statement statement = conn.createStatement();
      ResultSet rs = statement.executeQuery("SELECT database_role from v$database");
      ResultSetMetaData rsmd = rs.getMetaData();
      int columnsNumber = rsmd.getColumnCount();
      rs.next();
      show("Database role : " + rs.getString(1));
      rs.close();
      ResultSet resultSet = statement.executeQuery("SELECT SYS_CONTEXT('userenv', 'instance_name') as instance_name"
          + ", SYS_CONTEXT('userenv', 'server_host')" + " as server_host" + ", SYS_CONTEXT('userenv', 'service_name')"
          + " as service_name" + ", SYS_CONTEXT('USERENV','db_unique_name')" + " as db_unique_name" + " from sys.dual");
      resultSet.next();
      show("instance_name : " + resultSet.getString("instance_name"));
      show("server_host : " + resultSet.getString("server_host"));
      show("service_name : " + resultSet.getString("service_name"));
      show("db_unique_name : " + resultSet.getString("db_unique_name"));
      resultSet.close();
      statement.close();
    } catch (SQLException sqex) {
      show("verifyConnection failed " + sqex.getMessage());
    }
  }

  public void show(String msg) {
    System.out.println(msg);
  }
}