|
||||
|
|
JDBCデータベース接続
|
|
|
JDBCとは
JDBCとは Javaから一般的なデータベースへのデータアクセスを提供するアプリケーションプログラミングインタフェースです。JDBCは、次のようなさまざまなJavaコンポーネントから利用することができます。
JDBCドライバは、実際にデータベースに接続し、その後のデータベース・アクセスを実行する役目を持っています。JDBCドライバ・マネージャがJDBCドライバを管理できるように、JDBCドライバは、JDBC Driver APIのインターフェイスを実装する必要があります。 JDBCを使って、特定のデータベースに接続するためには、そのデータベースのためのドライバが必要になります。数多くのデータベース・ベンダやミドルウェア・ベンダが、さまざまな JDBCドライバを提供していますが、JDBCドライバは、その実装方法によって、次の4つのタイプに分けられます。 JDBCのタイプJDBC-ODBCブリッジ・ドライバデータディレクトテクノロジーズと、サン・マイクロシステムズが共同開発したドライバで J2SEに含まれています。これを使用するためには、クライアントに既にODBCドライバがインストールされている必要があります。JDBC-ODBCブリッジ・ドライバ は JDBC APIと ODBC APIのマッピングを行ってくれます。 ![]() ネイティブ・ブリッジ・ドライバJDBC APIをデータベース製品固有のネイティブAPIにマッピングして、データベースにアクセスします。オラクルの場合は、ネイティブ・ブリッジ・ドライバとしてOCIドライバを提供しています。OracleデータベースのクライアントAPIであるOCI(Oracle Call Interface)を利用するため、Oracleクライアントのインストールが必要になります。 ![]() ネット・プロトコル・ドライバミドルウェア・サーバを介してデータベースにアクセスします。JDBCドライバは、データベースに依存しない中間プロトコルを用いて、ミドルウェア・サーバと通信します。中間サーバーが必要になるのでシステムの構成が複雑になります。ネット・プロトコル・ドライバとして、データディレクトテクノロジーズのSequeLink for JDBCなどがあります。 ![]() ネイティブ・プロトコル・ドライバデータベース製品固有のネイティブAPIを完全にJavaのみで実装したものです。 ネイティブAPIをJavaで実装するため、このドライバがあればデータベースへの接続を提供することが出来るので、システム構成をシンプルにすることが出来ます。オラクルの場合は、ネイティブ・プロトコル・ドライバとして、Thinドライバを提供しています。Thinドライバは、TCP/IP上のNet8通信を実装しており、Oracleデータベースと直接通信することが可能です。 ![]() 各DBMSのJDBCを取得する
JDBCドライバは各ベンダ等から提供されています。今回は国内で使用されている代表的なDBMSのJDBCドライバについて、2006年 4月現在のダウンロードサイトをご紹介します。
データベースのバージョンや Java Development Kit (JDK)のバージョンによっても使用できる JDBCドライバも変わってきます。また、上記で説明したタイプもありますので、適切なJDBCドライバをダウンロードしてください。 Oraclehttp://otn.oracle.co.jp/software/tech/java/jdbc/index.htmlSQLServer2000http://www.microsoft.com/japan/msdn/sqlserver/downloads/jdbc/default.aspMySqlhttp://dev.mysql.com/downloads/connector/j/PostgreSQLhttp://jdbc.postgresql.org/download.htmlドライバを使うためには、ダウンロードした JAR ファイル をクラスパスに含む必要があります。そのためには、CLASSPATH 環境変数で示した場所に置くか、java コマンドのオプションで指定します。 簡単なデータベースへ接続プログラム
では簡単なデータベース接続プログラムを見てみます。
今回は Javaから Oracleに接続して、ユーザIDと会社名を取得して表示するというシンプルなものです。
import java.sql.*;
public class JDBC_Test {
public static void main (String args[]) {
Connection con = null;
Statement smt = null;
ResultSet rst = null;
// Oracle JDBC Driverのロード
try{
Class.forName("oracle.jdbc.driver.OracleDriver");
}catch(ClassNotFoundException ce){
return;
}
/* データベースへ接続 */
try{
con = DriverManager.getConnection (
"jdbc:oracle:thin:@localhost:1521:jdbcsample",
"usid",
"pswd");
// ステートメントを作成
smt = con.createStatement();
// 問合せの実行
rst = smt.executeQuery("select USER_ID, CORP_NAME from USER_TABLE");
// 問合せ結果の表示
while ( rst.next() ) {
// 列番号による指定
System.out.println(rst.getString("USER_ID") + "\t" + rst.getString("CORP_NAME"));
}
// 結果セットをクローズ
rst.close();
// ステートメントをクローズ
smt.close();
//接続をクローズ
con.close();
}catch(Exception e){
e.printStackTrace();
}
}
}
上のソースがどのような事を行っているのか順を追ってみていきます。パッケージのインポートデータベースを扱うための基本的なクラスはすべて「java.sql」パッケージに含まれるので、これらをインポートしてパッケージ名を省略できるようにしますimport java.sql.*; JDBCドライバのロードJDBCドライバを使用する前に、まずJDBCドライバを読みこむ必要があります。Classクラスの静的メソッドでJDBCドライバをロードします。
Class.forName("oracle.jdbc.driver.OracleDriver");
コネクションの取得ドライバーマネージャーから、データベースへコネクションを取得します。取得には DriverManagerクラスのgetConnectionメソッドを使用しますが、指定する第一パラメータは「データベースURL」と呼ばれ、ここの記述は接続タイプやDBMSによって異なります。今回は Oracle JDBC Thin Driverを使用しているため、「jdbc:oracle:thin:@<ホスト名>:<リスナのポート番号>:<Oracle SID>」という書式でデータベースURLを指定します。この箇所は環境によって異なりますので適宜変更してください。 第二、第三引数には、それぞれデータベース・ユーザーとそのパスワードを指定します。
con = DriverManager.getConnection (
"jdbc:oracle:thin:@localhost:1521:jdbcsample",
"usid",
"pswd");
SQLの実行SELECT SQLを実行するときには、Connectionオブジェクトから取得した Statementオブジェクトの executeQueryメソッドを使用します。 SQLの実行結果は ResultSetオブジェクトとして返されます。サンプルでは、USER_TABLEテーブルから、USER_IDフィールドと CORP_NAMEフィールを取得します。
rst = smt.executeQuery("select USER_ID, CORP_NAME from USER_TABLE");
結果の操作SQLで取得した レコード全件を参照するために、 rst.next() メソッドが false を返すまで while ステートメントを使用して繰り返しを行ないます。 ResultSetオブジェクトは取得した当初先頭のレコードを参照していますが、この next() メソッドを実行することで参照するレコードを順に進めていきます。現在参照するレコードの各フィールドのデータを取り出すには getXXX()メソッド を使用します。 XXXの箇所はデータ型になり、文字列が格納されている場合は getString()メソッドになります。
while ( rst.next() ) {
// 列番号による指定
System.out.println(rst.getString(1) + "\t" + rst.getString(2));
}
各オブジェクトのクローズオープンした、レコードセット、ステートメント、コネクションをクローズします。今回は簡易的なため例外時の対応が組み込まれていませんが、本来であればコネクションが開いたままにならないよう考慮します。 rst.close(); smt.close(); con.close(); 主なインタフェースのメソッド
使用するインタフェースの主要なメソッドをご紹介します。
各メソッドの詳細な説明は順次追加していく予定です。 java.sql.Connection
java.sql.Statement
java.sql.ResultSet
|