目次へ

(補足)Oracleへの接続

この章ではOracleデータベースへの接続について説明します。サンプルプログラムの実装対象とするOracleのバージョンは「8.1.6」ですが、それ以上のバージョンについてもほぼ同じです。

1. OCI Driverを用いた接続方法

Oracleは「Oracle JDBC OCI Driver」と「Oracle JDBC Thin Driver」の2種類のJDBCドライバを提供しています。どちらのドライバを使用する場合でも、Oracleのインストールディレクトリの「jdbc/lib」にある「classes111.zip」か「classes12.zip」(前者はJDK1.1用。後者はJava2用)をクラスパスに含める必要があります。(Oracle 9iではThinドライバとOCIドライバでファイルが分かれていますので、それぞれ必要なものをクラスパスに含めてください。)

「Oracle JDBC OCI Driver」は「Oracle Call Interface(OCI)」を使用してOracleデータベースに接続します。このため実行時にOCIのライブラリ(インストールディレクトリの「lib」以下)が必要で、実質的にOracle Clientがインストールされているマシンでしか使用することができません。実行時にはライブラリのあるディレクトリを、「java.library.path」という環境変数か、Linuxの場合は「LD_LIBRARY_PATH」環境変数に設定する必要があります。

Oracleデータベースへの接続方法はPostgreSQLでの方法とほぼ同じです。まず最初にJDBCドライバをロードします。

Class.forName("oracle.jdbc.driver.OracleDriver");

次に接続するデータベースを指定します。

Connection connection=DriverManager.getConnection("jdbc:oracle:oci8:@oracle.techscore","scott","tiger");

引数の1つ目はデータベースのURL、2つ目がユーザ名、3つ目がパスワードです。データベースのURLはOCI Driverの場合

jdbc:oracle:oci8:@(tnsnames.oraに登録されているデータベースサービス名)

になります。予め「tnsnames.ora」設定ファイルにデータベースが登録されている必要があります。

2. Thin Driverを用いた接続

「Thin Driver」はクライアントライブラリを使用せず、Net8プロトコルを用いて直接Oracleデータベースに接続するタイプのJDBCドライバです。クラスライブラリだけで動作する事ができるので、Oracle Clientがインストールされていないマシンでも動作させる事が可能です。

Oracleデータベースへの接続方法は、「OCI Driver」とほぼ同じです。

Class.forName("oracle.jdbc.driver.OracleDriver");
Connection connection=DriverManager.getConnection("jdbc:oracle:thin:@dbserver:1521:oracle","scott","tiger");

「getConnection」の第1引数の形式だけが異なります。

jdbc:oracle:thin:@(ホスト名):(ポート番号):(接続するデータベースのSID)


ポート番号は、Oracleが稼動しているサーバの「listener.ora」ファイルに記述されています。デフォルトは「1521」です。

「OCI Driver」はJDBCタイプ2、「Thin Driver」はJDBCタイプ4のドライバです。したがって通常は「Thin Driver」の方が使い勝手が良いのですが、機能によっては「OCI Driver」にしかサポートされていないものもあります。使い勝手が良いのは「Thin Driver」、高機能なのは「OCI Driver」といったところでしょうか。場合によって使い分ける必要があります。

3. SQL文の実行

接続完了後のクエリーの実行は、PostgreSQLと全く同じです。Oracleではサンプルとしてインストールされる「scott」スキーマの「DEPT」テーブルを主に使用します。このテーブルの定義は以下の通りです。

DEPTNO number(2)
DNAME varchar2(14)
LOC varchar2(14)
Statement statement=connection.createStatement();
ResultSet result=statement.executeQuery("select DEPTNO,DNAME,LOC from DEPT");
while(result.next()){
  ...
}

PostgreSQLの場合と異なり、

  • 「ResultSet」はデフォルトで、nextメソッドの方向にしか操作できないという点
  • 実行するクエリー文の最後にセミコロン(;)をつけてはいけない点

に注意してください。またOCIドライバで日本語データを含むSQL文を扱う場合、環境変数「NLS_LANG」が適切に設定されていなければならない点にも注意してください。Linuxの場合は

export NLS_LANG=Japanese_Japan.JA16EUC

とする事になります。

更新処理の方法もPostgreSQLと同じです。

PreparedStatement statement=connection.prepareStatement("insert into DEPT values(?,?,?)");
...
statement.executeUpdate();

(実習課題1)

以下のコンソールプログラムを作成しなさい。

  • Oracleデータベースのテーブル内容を表示する。テーブルは任意で良い。
  • OCI Driverを用いて作成する事。

解答例はこちら

(実習課題2)

以下のコンソールプログラムを作成しなさい。

  • Oracleデータベースのテーブルにデータを追加する。テーブルは任意でよい。
  • 追加するデータは任意でよいが、必ず日本語を含める事。
  • Thin Driverを用いて作成する事。

解答例はこちら

(実習課題3)

実習課題2のプログラムを改良しなさい。

  • OCI Driverを用いて作成する事。

解答例はこちら

 

↑このページの先頭へ

こちらもチェック!

PR
  • XMLDB.jp
  • シナジーマーケティング研究開発グループブログ