JDBC−ODBCブリッジは、JAVAからODBCドライバを経由したデータベースアクセスを実現する機能です。
このタイプは、接続先のデータベースベンダーからJDBCドライバが提供されていない時に使用します。
ODBCドライバはクライアントのリソースのため、クライアントリソースにアクセスできないアプレットからは
使用できません。このためJAVAアプリケーションからの利用のみとなります。
ですから、OSに依存しないというJAVAの基本概念から反しているといえるので、
接続先のデータベースベンダーからJDBCドライバが提供されていない場合や
JAVAからのデータベース接続方法を手軽に習得するときのみに利用するとよいでしょう。
JDK1.2はJDBC−ODBCブリッジを標準装備されていますが、それ以前のJDKをお使いの方は、
JDBC−ODBCブリッジをSun MicrosystemsまたはIntersolvからダウンロードする必要があります。
ここでは、JDK1.2を前提に解説していきます。
タイプ | アプリケーション | アプレット | 必要なドライバ | ||
|
○ | × | ODBCドライバ |
1.2 JDBC−ODBC構成
JAVAアプリケーションが発行したJAVAのAPIをJDBCドライバマネージャがJDBC−ODBCブリッジに渡し、
JDBC−ODBCブリッジがODBCのAPIに変換してデータベースに接続しています。
下記にJDBC−ODBC構成を示します。
クライアント |
JAVAアプリケーション |
JDBCドライバマネージャ |
JDBC−ODBCブリッジ |
ODBCドライバマネージャ |
ODBCドライバ |
SQL*NET |
サーバ |
SQL*NET |
ORACLE(データベース) |
1.3 ODBCデータソースの設定
接続するデータベースへのODBCデータソースを設定します。
Ex)
「コントロールパネル」「ODBCデータソース」で接続するデータベースへの
ODBCデータソースを設定する。
以下の接続手順で使用するデータソース名:TEST
1.4 接続手段
データベースへアクセスするJAVAアプリケーションの作成手順を下記に示します。
(1) 必要クラスのインポート
(2) ドライバのロード
(3) データベースへの接続
(4) DBML(SQL)の実行
(5) データベースからの切断
(1) 必要クラスのインポート
まずは、必要となるクラスのインポートを定義します。
import sun.jdbc.odbc.*;
import java.sql.*;
(2) ドライバのロード
JDBC−ODBCブリッジの読み込みを行います。
JDBC−ODBCブリッジの読み込みは、java.lang.ClassクラスのClass.forNameメソッドを使用します。
Class.forName (" JDBC−ODBCブリッジ名");
Ex)
Class.forName ("sun.jdbc.odbc.JdbcOdbcDriver");
(3) データベースへの接続
データベースへの接続は、java.sql.DriverManagerクラスのDriverManager.getConnectionメソッドを使用して
java.sql.ConnectionクラスのConnectionオブジェクトを取得することで行います。
Connection Connectionオブジェクト =
DriverManager.getConnection (url,
user, passwd);
urlは”jdbc:odbc:データソース名”を指定します。
userはデータベースのユーザー名を指定します。
passwdはデータベースのパスワードを指定します。
Ex)
Connection conn =
DriverManager.getConnection ("jdbc:odbc:TEST",
"scott", "tiger");
(4) DBML(SQL)の実行
DBML(SQL)の実行は次の手順で行います。
1) Statementオブジェクトの作成
SQL文を発行するためのStatementオブジェクトをConnectionインターフェースからcreateStatement メソッドを利用して作成します。
Statement Statementオブジェクト = conn.createStatement ();
EX)
Statement stmt = conn.createStatement ();
2) DBML(SQL)の実行
DBML(SQL)は、3.1で作成したStatementオブジェクトを利用してexecuteQueryメソッドで実行します。
また、実行結果はResultSetオブジェクトに格納されます。
ResultSet ResultSetオブジェクト = Statementオブジェクト.executeQuery
(SQL文);
Ex)
ResultSet rset = stmt.executeQuery ("select ENAME from
EMP");
3) 実行結果の読み込み
実行結果の読み込みは、3.2で取得したResultSetオブジェクトからnextメソッドで読み込みます。
nextメソッドは、実行結果1行を先頭から読み込みます。
ResultSetオブジェクト.next ()
Ex)
rset.next ()
4) 読み込み結果の取得
読み込み結果の取得は、3.2で取得したResultSetオブジェクトからgetStringメソッドで取得します。
ResultSetオブジェクト.getString (列番号または列名)
Ex)
rset.getString (1) // 1列目を取得
rset.getString (”ENAME”) // ENAMEを取得
(5) データベースからの切断
作成したオブジェクトをcloseメソッドを使用して明示的に解放します。
ただし、解放せずアプリケーションを終了しても、カベレージコレクションで暗示に解放されますが、
リソースを解放するためにも、明示的に解放するほうが懸命です。
1) ResultSetオブジェクトの解放
ResultSetオブジェクトをloseメソッドを解放します。
ResultSetオブジェクト.close();
Ex)
rset.close();
2) Statementオブジェクトの解放
Statementオブジェクトをloseメソッドを解放します。
Statementオブジェクト.close();
Ex)
stmt.close();
3) Connectionオブジェクトの解放
Connectionオブジェクトをloseメソッドを解放します。
Connectionオブジェクト.close();
Ex)
conn.close();