JDBC
JDBC
Java2 SE 5.0 API
Java2 SE 1.4 API
Java2 EE API
Struts 1.0.2
MSDN2 Library
MySQL 5.1
MySQL 4.1
HTMLリファレンス
CSSリファレンス
JavaScript
基本カラーチャート
カレンダー
 最新PG・講座情報
 最新ニュース
 電子辞書・辞典
ご意見・ご要望はこちらまで

連載

JDBC

プリコンパイル


1.プリコンパイルとは

 SQL文のWHERE句などでシングルコーテーションで囲まれた文字列コードがある場合、 データベース側で、内部構造に合わせて解釈し、コンパイルされ、実行されます。
 実行時にこれらの全ての工程が行われるということは、大量のループ文の中にこのようなSQL文がある場合にはかなりの負荷が掛かります。
 そこでこのようなループ文の中では、コンパイル済みのSQL文を使うことでかなりの改善が可能となります。 SQL文全てでなく、問題となる文字列をパラメータ化しコンパイルしておくことをプリコンパイルといいます。

2.プリコンパイルの方法

 通常SQL文を発行する場合はまず Statementオブジェクトを作成し、execute系メソッドを発行してきました。 プリコンパイルを行う場合は prepareStatementメソッドでSQL文を引数として渡し、PreparedStatementオブジェクトを作成します。
 この時にパラメータ化する文字列部分は"?"で表現しておきます。"?"は複数箇所で表現可能です。
 次に、問題となるループの中で、"?"が出現した順に、その値のデータ型に応じた setXXXXメソッドで実際の値を設定します。 setXXXXメソッドは通常の読み込み時の getXXXXメソッドに対応しています。
 後はPreparedStatementオブジェクトのexecute系メソッドを同じループ内で発行します。 通常では実行時にSQL文をループ内で渡すので、負荷が掛かります。

3.プリコンパイルの例

 データベースの接続後のプリコンパイルの例を下記に示します。
 この場合は2万件のデータをユーザIDだけ連番で作成し、名前は同一の"氏名"として後で修正する例です。 SQLの引渡し場所に注意して下さい。

 
PreparedStatement stmt = conn.prepareStatement(
 "INSERT INTO DB0201 (ID, name) VALUES (?, ?)");

int i=0;
while (i<20000) {
 stmt.setInt(1, i);       // 1は1個目の?
 stmt.setString(2, "氏名");   // 2は2個目の?
 int cnt = stmt.executeUpdate(); // 引数はなし
 i++;
}
 プリコンパイルの例
 

Top
Copyright© 2003-2007 FumikiChan All Rights Reserved.
http://www.fumikichan.net/