2003年度 データベース論

JDBC
J2EE I (データベース論)
第5回 / 2004-05-19
お知らせ


6月9日(水)の授業は、安藤が出張のため、
休講の予定です。
第1回レポート課題を出します。締め切り
は6月16日(水)です。
きょうの内容

JDBCのプログラミングの基本を知る。
JDBCとは何か?


JDBCは、Javaを使ってリレーショナルデー
タベースを利用するためのAPI。
主に java.sql パッケージと javax.sql パッ
ケージに納められている。
JDBCプログラミングの
基本パターン
1.
データベースとの接続の確立

2.
SQLの実行

3.
Connection オブジェクトを取得
Statement オブジェクトを取得し、SQL文を実
行
SQLの実行結果の処理

ResultSet オブジェクトのデータを取り出す
データベースとの接続の確立 (1)
必要な情報とJDBCドライバ


Connection オブジェクトを取得するのが目標
次の情報が必要になる




JDBCドライバ
データベースの URL
データベースにアクセスするユーザ名とパスワード
JDBCドライバ

データベース管理システム (DBMS) に固有の処理
をまとめたもの
データベースとの接続の確立 (2)
プログラムの流れ
// JDBCドライバの指定
Class.forName("org.hsqldb.jdbcDriver");
// URL の指定
String url = "jdbc:hsqldb:hsql://localhost";
// Connection オブジェクトを取得
Connection con =
DriverManager.getConnection(url,"sa", "");
データベースとの接続の確立 (3)
Connection の取得方法

JDBCドライバの利用


「JNDI」というネームサービスの利用


いちばん一般的な方法
J2EEでは一般的
Connection Pooling の利用

Connection の取得は「重い」処理なので、あ
らかじめいくつかのConnection をあらかじめ
取得しておいてためておく
SQL の実行 (1)
必要なインタフェース

Connection を取得したら、次のいずれか
のインタフェースを使ってSQLを実行する。


Statement
PreparedStatement
SQL の実行 (2)
Statement を使った例
// SQL文
String select = "select title from books";
// Statement の取得
Statement stmt = con.createStatement();
// SQLの実行 (結果は ResultSet に)
ResultSet rs = stmt.executeQuery(select);
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();
SQL の実行 (4)
PreparedStatement とパラメータ
String insert = "insert into books
values( ? , ? , ? , ? , ? , ? )";
・・・・・・
// 1番目の“?” に対応
st.setString(1, ndc);
// 2番目の“?” に対応
st.setString(2, tyosya_hyouji);
SQL の実行 (5)
データベースの検索と更新
// 検索 (select) の場合
ResultSet rs =
stmt.executeQuery(selectStatement);
// 更新 (insert, update, delte) の場合
// result には更新された行数が返る
int result = prepStmt.executeUpdate();
SQLの実行結果の処理
プログラムの流れ
// ResultSet には複数の検索結果が返る
while (rs.next()) {
// 1行分の検索結果のうち、
// “title” という項目のデータを返す
String title = rs.getString("title");
System.out.println(title);
}
プログラムのコンパイルと実行


実行時にはデータベースが立ち上がって
いる必要あり。
JDBCドライバが含まれる Jar ファイルを指
定する必要あり。
java –classpath
%HSQLDB_HOME%\lib\hsqldb.jar;.
JDBCTest