第 2 章 アプリケーションの設計
2.5 データ操作
ここでは、データ操作の方法について説明します。
2.5.1 データ検索について
データ検索は以下の流れで行います。
SQL
文を実行するためのオブジェクトの生成
SQL文は使用するインタフェースにより指定するメソッドが異なります。以下にインタフェースごとにSQL文を指定するメ ソッドを示します。
Statementインタフェース PreparedStatementインタフェース executeQueryメソッドで指定。
StatementオブジェクトはConnection インタフェースのcreateStatementメ ソッドで作成。
prepareStatementメソッドで指定。
PreparedStatementオブジェクトは Connectionインタフェースの prepareStatementメソッドで作成。
StatementインタフェースとPreparedStatementインタフェースはSQL文の使用方法により以下のように使い分けてくださ
い。
Statementインタフェース PreparedStatementインタフェース
“?”パラメタがない、単純なSQL文を 実行する場合に使用してください。
“?”パラメタを使用して、同じ形式の SQL文を、値を変えて複数回実行す る場合に使用してください。
SQL
文の実行
executeQueryメソッドによりSQL文(問合せ式)を実行します。SQL文が正常に実行されるとSQL文の条件を満たす行の
ResultSet(結果セット)が作成されます。
参照
指定可能なSQL文については、“SQLリファレンス”の“DECLARE CURSOR(カーソル宣言)”を参照してください。
カーソルの位置づけ
カーソルは、表の中の1行を特定する仮想的な道具です。カーソルを使用して処理の対象とする行を特定しておいて、
その行からデータを取り出したり、その行を更新したり、または削除したりすることができます。カーソルにより行を特定す ることを、カーソルを位置づけるといいます。
結果セットに対してカーソル操作を行いデータを取得する行を位置づけます。
nextメソッド(順方向)を使用することで、結果セットに対してカーソルを位置づけします。
なお、StatementオブジェクトまたはPreparedStatementオブジェクト作成時に、スクロールカーソル指定を行うことでnext メソッド以外に以下のメソッドを指定しカーソルの位置づけを行うことができます。
メソッド名 概要
absoluteメソッド カーソルを結果セットの指定された行に移動
afterLastメソッド カーソルを結果セットの最終行の直後に移動
beforeFirstメソッド カーソルを結果セットの先頭行の直前に移動
firstメソッド カーソルを結果セットの先頭行に移動
lastメソッド カーソルを結果セットの最終行に移動
previousメソッド カーソルを前の行に移動
relativeメソッド カーソルを正または負の相対行数だけ移動
データの取得
位置づけられた行からgetXXXメソッドを使用してデータを列単位に取得します。
参照
getXXXメソッドの詳細については“Java APIリファレンス”を参照してください。
オブジェクトのクローズ
生成した各クラスのオブジェクトを、closeメソッドを使用してクローズします。
2.5.2 データ更新について
データ検索は以下の流れで行います。
SQL
文を実行するためのオブジェクトの生成
SQL文は使用するインタフェースにより指定するメソッドが異なります。以下にインタフェースごとにSQL文を指定するメ ソッドを示します。
Statementインタフェース PreparedStatementインタフェース executeUpdateメソッドで指定。
StatementオブジェクトはConnection インタフェースのcreateStatementメ ソッドで作成。
prepareStatementメソッドで指定。
PreparedStatementオブジェクトは Connectionインタフェースの prepareStatementメソッドで作成。
StatementインタフェースとPreparedStatementインタフェースはSQL文の使用方法により以下のように使い分けてくださ
い。
Statementインタフェース PreparedStatementインタフェース
“?”パラメタがない、単純なSQL文を 実行する場合に使用してください。
“?”パラメタを使用して、同じ形式の SQL文を、値を変えて複数回実行す る場合に使用してください。
SQL
文の実行
executeUpdateメソッドによりSQL文(INSERT文やUPDATE文、DELETE文など)を実行します。
オブジェクトのクローズ
生成したオブジェクトを、closeメソッドを使用してクローズします。
2.5.3 ストアドプロシジャの実行について
ストアドプロシジャを実行する場合は以下の流れで行います。
ストアドプロシジャとは
クライアント側にあるアプリケーションをサーバで実行する形態の場合は、クライアントからサーバにSQL文を送信し、
サーバ側の実行結果をクライアント側で受信して処理を行っています。このとき、SQL文単位で送信・受信を繰り返すた め、クライアント側に通信負荷がかかります。大規模なアプリケーション開発の場合、このようなクライアント側の性能限界 を解消し、開発および保守の生産性を向上させるためにはプロシジャを利用します。プロシジャとは、サーバに登録する 処理手続きのことです。プロシジャをサーバに登録しておいて、クライアント側からプロシジャのルーチンを呼出し、サー バ側で一連のトランザクション処理を実行します。
ストアドプロシジャの登録
サーバ環境にストアドプロシジャを登録します。ストアドプロシジャはCREATE PROCEDUREで登録します。
参照
ストアドプロシジャの詳細は、“SQLリファレンス”を参照してください。
SQL
文の指定
SQL文はConnectionインタフェースのprepareCallメソッドに指定します。CALL文にサーバ環境に登録したプロシジャ
名を指定します。
SQL
文の実行
executeUpdateメソッドによりSQL文(CALL文)を実行します。
2.5.4 NULL の扱いについて
すべての列に対してNULLを扱うことができます(表の定義でNOT NULLが指定された列を除きます)。
JDBCドライバを利用したアプリケーションでは、getXXXメソッドでNULLを取得し、setXXXメソッドでNULLを指定す ることができます。
参照
getXXXメソッドおよびsetXXXメソッドの詳細については“Java APIリファレンス”を参照してください。
getXXXメソッドで取得したデータがNULLかどうかを判断するためには、データ取得後にwasNullメソッドを使用する
必要があります。これはデータの型によりNULLの値がNULL、0、またはfalseに変換されるためです。以下に各getXXX メソッドで返されるNULLの値について説明します。
メソッド名 返却値
getString NULL
メソッド名 返却値 getBigDecimal
getBytes getDate getTime getTimestamp getBinaryStream
getByte 0
getShort getInt getLong getFloat getDouble
getBoolean false
setXXXメソッドでNULLを指定する場合にはJavaのデータ型により使用するメソッドが異なります。以下に各データ型
に対して指定可能なsetXXXメソッドについて説明します。
Symfoware Serverのデー タ型
メソッド名
CHARACTER setString
setNull VARCHAR
NCHAR
NCHAR VARYING
NUMERIC setBigDecimal
setNull DECIMAL
BLOB setBytes
setBinaryStream setNull
DATE setDate
setNull
TIME setTime
setNull
TIMESTAMP setTimestamp
setNull
SMALLINT setNull
INTEGER FLOAT REAL
DOUBLE PRECISION