Vous pouvez exécuter des mises à jour et des suppressions positionnées lorsque votre application utilise des méthodes annotées et est exécutée dans une base de données DB2.
Avant de commencer
Vérifiez que votre application répond aux exigences suivantes :
- Vous pouvez exécuter des mises à jour et des suppressions positionnées uniquement sur les sources de données DB2.
- La méthode annotée qui exécute l'instruction SELECT (déclarant le curseur) doit retourner un élément ResultSet ou Iterator.
- La déclaration de la méthode qui exécute l'instruction SELECT et la déclaration de la méthode qui exécute l'instruction UPDATE ou DELETE doivent se trouver dans une interface unique.
- Les noms que vous utilisez pour les curseurs ne peuvent pas commencer par DB2JCCCURSOR
ou DB_PDQ.
- Vous ne devez pas ouvrir deux curseurs en même temps sur une seule connexion si ces curseurs ont le même nom.
- pureQuery émet une exception si une application suit ces étapes :
- Exécution d'une instruction SELECT déclarant un curseur pour une mise à jour ou une suppression positionnée.
- Exécution de la même instruction SELECT sur la même connexion dans laquelle a été exécutée la même instruction précédemment.
- Exécution d'une instruction UPDATE ou DELETE utilisant un curseur déclaré par l'une des instructions SELECT déclarés.
pureQuery ne peut pas déterminer à quel curseur l'instruction UPDATE ou DELETE fait référence.
Pourquoi et quand exécuter cette tâche
Pour les diagrammes de syntaxe des méthodes annotées, voir la section "Syntaxe des mises à jour et suppressions personnalisées" dans Syntaxe des méthodes annotées exécutant SQL sur les bases de données.
Procédure
Pour écrire le code d'exécution d'une mise à jour ou d'une suppression personnalisée :
- Lorsque vous déclarez la méthode annotée pour exécuter l'instruction SELECT qui positionne le curseur, utilisez l'attribut cursorName de l'annotation @Cursor pour spécifier le nom du curseur. Cette méthode doit retourner un objet java.sql.ResultSet ou un objet Iterator.
Avertissement : Si l'instruction SELECT contient une clause FOR UPDATE, mais que vous définissez l'attribut concurrent de l'annotation @Cursor sur java.sql.ResultSet.CONCUR_READ_ONLY (valeur par défaut), la clause FOR UPDATE est prioritaire sur l'attribut. pureQuery ouvre le curseur comme un curseur pouvant être mis à jour.
- Lorsque vous déclarez la méthode annotée pour déclarer une instruction UPDATE ou DELETE qui utilise le curseur, voir l'attribut positionedCursorName
dans l'annotation @Update pour spécifier le nom du curseur.