オープンソースで作る Java+DB

特集 オープンソースで作るJava+DB
第2回 コードから学ぶJSPのデータベースアクセスの基礎 (4/8)

JDBCによるデータベースアクセスの基本

 それでは次に、リスト2におけるデータベース処理の流れを順に見ていくことにしよう。

1. java.sqlパッケージのインポート

 JDBCは、java.sqlパッケージに属している。そこでまず、2行目にあるように、java.sqlパッケージをインポートしておく。

2: <%@ page import="java.sql.*" %>

One Point!

java.sqlパッケージと似たパッケージとして「javax.sql」パッケージがあるが、これは別物なので注意してほしい。

2. JDBCドライバの読み込み

 JDBCを使ってデータベースにアクセスする場合には、あらかじめJDBCドライバを読み込んでおく必要がある。JDBCドライバを読み込むには、34行目にあるように、ClassクラスのforNameメソッドを呼び出せばよい。

34: Class.forName("org.postgresql.Driver");

 引数に指定するのは、JDBCドライバの名前だ。JDBCドライバの名前は、利用するJDBCドライバによって異なるので注意しよう。PostgreSQLのJDBCドライバを使う場合には、ここに示したように、「org.postgresql.Driver」を指定する。

 この構文の実行によって、JDBCドライバが実行時に読み込まれる。つまり、pg73b1jdbc3.jarファイルが読み込まれるわけだ。

One Point!

JDBCドライバの存在は、コンパイル時にはチェックされない。そのためコンパイルが成功しても、もし、実行時にpg73b1jdbc3.jarファイルが見つからない場合には、実行時エラーとなる。

3. データベースへの接続

 データベースに接続するには、41行目にあるように、DriverManagerクラスのgetConnectionメソッドを呼び出す。

41: // データベースに接続する
   conn = DriverManager.getConnection(
   "jdbc:postgresql:sampledb",
   "dbuser", // ユーザー名
   "mypassword"); // パスワード

 第1引数に指定するのは、接続先のデータベース名だ。PostgreSQLのJDBCドライバを使う場合には、「jdbc:postgresql://ホスト名:ポート番号/データベース名」の書式を利用する。ホスト名およびポート番号は省略可能であり、実際に省略した場合には、それぞれlocalhost、5432とみなされる。

 そして第2引数、第3引数は、接続時のユーザー名とパスワードとなる。

 getConnectionメソッドは、データベースへの接続に成功すると、Connectionオブジェクトを返す。このConnectionオブジェクトを通じて、以降、データベースにアクセスすることになる。

4. クエリーの実行

 JDBCからのデータベース操作は、データベースに対して、SELECT文、UPDATE文、INSERT文、DELETE文などの各クエリーを実行することによって行なう。ここではKeijiテーブルに対してレコードを追加したいため、INSERT文を実行すればよい。そのためにはまず、44行目にあるように、ConnectionオブジェクトのcreateStatementメソッドを呼び出そう。

44: stmt = conn.createStatement();

 すると、クエリーの実行に必要なStatementオブジェクトが得られる。

 Statementオブジェクトが得られたならば、45行目にあるように、executeUpdateメソッドを呼び出せばよい。すると引数に指定したクエリーがデータベースに送信され、データベース上で実行される。これによりデータベースの内容が書き換わるのだ。

45: int resultCnt =
   stmt.executeUpdate(
   "INSERT INTO Keiji " +
   " (name, email, title, body, host) " +
   " VALUES ('" + username + "'," +
   " '" + email + "'," +
   " '" + title + "'," +
   " '" + msg + "'," +
   " '" + host + "')");

 ここでは、文字列結合することによって、INSERT文を作り、それをデータベースに送信している。

 executeUpdateメソッドは、処理に成功したならば、データベース上で影響を受けたレコード数が戻る。ここでは、INSERT文を送信して1レコード追加しているので、executeUpdateメソッドの戻り値は、「1」となる。ここでの例では、INSERT文を実行しているが、同様にしてUPDATE文を実行してレコードを更新したり、DELETE文を実行してレコードを削除したりすることも可能だ。

 ただしSELECT文を実行してテーブル内のレコードを得る場合には、executeUpdateメソッドではなく、executeQueryメソッドを用いる。その方法については後述する。

5. データベースからの切断

 以上でデータベースに対する操作は完了だ。あとは、データベースから切断すればよい。データベースから切断するには、59行目、63行目にあるように、closeメソッドを呼び出せばよい。

59: stmt.close();

63: conn.close();

One Point!

もちろんデータベースに接続したまま、次々とクエリーを送信することもできる。1度の接続で何回executeUpdateメソッドを呼び出してクエリーを送信してもかまわない。

前のページへ | 1 2 3 4 5 6 7 8 | 次のページへ

[大澤文孝,ITmedia]