アプリケーションがアノテーション付きメソッドを使用し、DB2® データベースに対して実行される場合、位置指定更新および削除を実行できます。
始める前に
アプリケーションが以下の要件を満たしていることを確認します。
- 位置指定更新および削除を実行できるのは、DB2 データ・ソースに対してだけです。
- カーソルを宣言する SELECT ステートメントを実行するアノテーション付きメソッドは、ResultSet または Iterator を返す必要があります。
- SELECT ステートメントを実行するメソッドの宣言と、UPDATE または DELETE ステートメントを実行するメソッドの宣言は、1 つのインターフェース内になければなりません。
- カーソルに使用する名前の先頭は、DB2JCCCURSOR または DB_PDQ であってはなりません。
- 2 つのカーソルが同名の場合、1 つの接続に対してその 2 つのカーソルを同時に開いてはなりません。
- アプリケーションが以下のステップを実行すると、pureQuery は例外をスローします。
- 位置指定更新または削除に対するカーソルを宣言する SELECT ステートメントを実行する。
- 最終ステートメントが前に実行されたのと同じ接続に対して、同じ SELECT ステートメントを再度実行する。
- いずれかの SELECT ステートメントが宣言したカーソルを使用する UPDATE または DELETE ステートメントを実行する。
pureQuery は、UPDATE または DELETE ステートメントが参照するのが 2 つのカーソルのいずれかを判別できません。
このタスクについて
アノテーション付きメソッドの構文図については、データベースに対して SQL を実行するアノテーション付きメソッドの構文の『位置指定更新および削除の構文』を参照してください。
手順
位置指定更新または削除を実行するコードを作成するには、次のようにします。
- カーソルを配置する SELECT ステートメントを実行するアノテーション付きメソッドを宣言する場合、@Cursor アノテーションの cursorName 属性を使用してカーソル名を指定します。 このメソッドは、java.sql.ResultSet オブジェクトまたは Iterator オブジェクトを返さなければなりません。
重要: SELECT ステートメントに FOR UPDATE 節が含まれるが、@Cursor アノテーションの concurrency 属性を java.sql.ResultSet.CONCUR_READ_ONLY (デフォルト値) に設定した場合、FOR UPDATE 節がこの属性に優先します。pureQuery は、更新可能カーソルとしてカーソルを開きます。
- カーソルを使用する UPDATE または DELETE ステートメントを実行するアノテーション付きメソッドを宣言する場合、@Update アノテーションの positionedCursorName 属性を使用してカーソル名を指定します。