2003年度 データベース論

JDBC
J2EE I
第6回 / 2006-01-14
1
今回の内容





JDBCプログラミングの基本パターン
データベースとの接続の確立
SQLの実行
SQLの実行結果の処理
プログラムのコンパイルと実行
2
JDBCプログラミングの
基本パターン
3
JDBCとは何か?


JDBCは、Javaを使ってリレーショナルデー
タベースを利用するためのAPI。
主に java.sql パッケージと javax.sql パッ
ケージに納められている。
4
JDBCプログラミングの
基本パターン

データベースとの接続の確立


SQLの実行


Connection オブジェクトを取得
Statement オブジェクトを取得し、SQL文を実行
SQLの実行結果の処理

ResultSet オブジェクトのデータを取り出す
5
データベースとの接続の確立
6
データベースとの接続の確立 (1)
目標と必要な情報


Connection オブジェクトを取得するのが目標
次の情報が必要になる



JDBCドライバ
データベースの URL
データベースにアクセスするユーザ名とパスワード
7
JDBCドライバ


データベース管理システム (DBMS) に固
有の処理をまとめたもの
通常は、DBMSごとにJarファイルで提供さ
れている
8
データベースとの接続の確立 (2)
プログラムの流れ
// JDBCドライバの指定
Class.forName("org.hsqldb.jdbcDriver");
// URL の指定
String url = "jdbc:hsqldb:hsql://localhost";
// Connection オブジェクトを取得
Connection con =
DriverManager.getConnection(url,"sa", "");
9
データベースとの接続の確立 (3)
Connection の取得方法

JDBCドライバの利用


「JNDI」というネームサービスの利用


いちばん一般的な方法
J2EEでは一般的
Connection Pooling の利用

Connection の取得は「重い」処理なので、あ
らかじめいくつかのConnection をあらかじめ
取得しておいてためておく
10
SQLの実行
11
SQL の実行 (1)
必要なインタフェース

Connection を取得したら、次のいずれか
のインタフェースを使ってSQLを実行する。


Statement
PreparedStatement
12
SQL の実行 (2)
Statement を使った例
// SQL文
String select = "select title from books";
// Statement の取得
Statement stmt = con.createStatement();
// SQLの実行 (結果は ResultSet に)
ResultSet rs = stmt.executeQuery(select);
13
SQL の実行 (3)
PreparedStatement を使った例
// SQL文
String insert = "insert into books
values( ? , ? , ? , ? , ? , ? )";
// SQL文を設定しておく
PreparedStatement st=con.prepareStatement(insert);
// パラメータに値を設定
st.setString(1, ndc); st.setString(2, tyosya_hyouji);
// SQL文を実行 (select文なら executeQuery)
int result = st.executeUpdate(); st.close();
14
SQL の実行 (4)
PreparedStatement とパラメータ
String insert = "insert into books
values( ? , ? , ? , ? , ? , ? )";
・・・・・・
// 1番目の“?” に対応
st.setString(1, ndc);
// 2番目の“?” に対応
st.setString(2, tyosya_hyouji);
15
SQL の実行 (5)
データベースの検索と更新
// 検索 (select) の場合
ResultSet rs =
stmt.executeQuery(selectStatement);
// 更新 (insert, update, delte) の場合
// result には更新された行数が返る
int result = prepStmt.executeUpdate();
16
SQLの実行結果の処理
17
SQLの実行結果の処理
プログラムの流れ
// ResultSet には複数の検索結果
// これをひとつずつ処理する
// 検索結果が10件あれば、ループは10回まわる
while (rs.next()) {
// 1件分の検索結果のうち、
// “title” という項目のデータを返す
String title = rs.getString("title");
System.out.println(title);
}
18
プログラムのコンパイルと実行
19
Jarファイル


J2SEに含まれていないJavaのプログラム
(=クラスファイル)は「Jarファイル」にまとめ
られている。
Jarファイル


拡張子は “.jar”
Zip とほとんど同じフォーマット。つまり圧縮+
アーカイブの機能を持っている。
20
Jarファイルの取り扱い (1)


J2SE 添付の jar コマンドを使う
Jarファイルを作る



jar cvf sample.jar sample¥
sampleフォルダ以下を sample.jar にまとめる
Jarファイルを展開


jar xvf sample.jar
sample.jar を展開(解凍)する
21
Jarファイルの取り扱い (2)

Jarファイルの中身を見てみる



jar tvf sample.jar
sample.jar の中身を見てみる
jar コマンドのオプションは、Unix の tar コ
マンドとほとんど同じ
22
クラスパス


あるプログラムをコンパイル・実行するとき、
J2SE以外のjarファイルを必要とする場合、
classpath オプションで jar ファイルを指定
する
コンパイル


Javac -classpath hoge.jar Test.java
実行

java -classpath hoge.jar;. Test
23
プログラムのコンパイルと実行


実行時にはデータベースが立ち上がって
いる必要あり。
JDBCドライバが含まれる Jar ファイルを指
定する必要あり。
java –classpath
%HSQLDB_HOME%\lib\hsqldb.jar;.
JDBCTest
24