• 検索結果がありません。

第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メソッド カーソルが位置づけられている行の次の行にカーソ

ルを位置づけます。

absoluteメソッド 先頭行から、指定された値の分だけうしろの行にカー

ソルを位置づけます。負の値を指定した場合は、そ の値の絶対値分だけ前の行にカーソルを位置づけ ます。

afterLastメソッド カーソルを最終行の直後に位置づけます。

beforeFirstメソッド カーソルを先頭行の直前に位置づけます。

firstメソッド カーソルを先頭行に位置づけます。

lastメソッド カーソルを最終行に位置づけます。

previousメソッド カーソルが位置づけられている行の直前の行に位置

づけます。

relativeメソッド カーソルが位置づけられている行に指定された値を

加算した行にカーソルを位置づけます。

注意

next以外のメソッドを使用する場合、Statement オブジェクトまたはPreparedStatement オブジェクト作成時に、スクロール カーソル指定を行う必要があります。

データの取得

位置づけられた行から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 getBlob getClob getObject getURL

メソッド名 返却値

getByte 0

getShort getInt getLong getFloat getDouble

getBoolean false

setXXXメソッドでNULLを指定する場合にはJavaのデータ型により使用するメソッドが異なります。以下に各データ型に

対して指定可能なsetXXXメソッドについて説明します。

Symfoware Serverのデータ

メソッド名

CHARACTER setString

setClob setObject setURL setNull VARCHAR

NCHAR setString

setObject setNull NCHAR VARYING

NUMERIC setBigDecimal

setObject setNull DECIMAL

BLOB setBytes

setBinaryStream setBlob setObject setNull

DATE setDate

setObject setNull

TIME setTime

setObject setNull

TIMESTAMP setTimestamp

setObject setNull

SMALLINT setObject

setNull INTEGER

FLOAT REAL

DOUBLE PRECISION

2.5.5 ResultSetの機能について

ResultSetインタフェースを使用することで、JDBC規約に定められている以下のResultSetの機能が利用できます。

・ ResultSetの同時複数操作

・ ResultSetの更新

参照

ResultSetインタフェースについては“Java APIリファレンス”を参照してください。

2.5.5.1 ResultSet の同時複数操作

getMoreResultsメソッドを使用すると、SELECT文の実行後に返される複数のResultSetを同時に操作することができます。

以下の例では複数のResultSetを同時に操作しています。

2.1

同時に複数結果セットの利用

(1)更新行の確認

(2)TBL1の結果セットを取得

(3)現在の結果セットを閉じずに次のカーソル位置に位置づけ

(4)TBL2の結果セットの取得

(5) 2つの結果セットを同時に利用

参照

getMoreResultsメソッドについては“Java APIリファレンス”を参照してください。

2.5.5.2 ResultSetの更新

ResultSet更新機能を使用することで、カーソルで位置づけている行に対してSQL文を利用せずにデータベース操作を 行うことができます。

以下の例ではResultSetインタフェースを使用し、データを更新しています。

(1) ResultSetによる更新を可能にする設定を行います。

(2) SQL文を実行して、ResultSetオブジェクトを生成します。

(3) カーソルの位置を最終行まで1行ずつ移動します。

(4)位置づけている行の“価格”列の値を取得します。

(5) 位置づけている行の“価格”列の値を更新します。

(6) データベースを更新します。