Je sélectionne un sous-ensemble de données à partir d'une base de données MS SQL à l'aide d'un PreparedStatement
. Lors de l'itération du résultat, je souhaite également mettre à jour les lignes. En ce moment j'utiliser quelque chose comme ceci:Mise à jour d'une base de données lors de l'utilisation d'une instruction prepareStatement sélectionnez
prepStatement = con.prepareStatement(
selectQuery,
ResultSet.TYPE_FORWARD_ONLY,
ResultSet.CONCUR_UPDATABLE);
rs = prepStatement.executeQuery();
while(rs.next){
rs.updateInt("number", 20)
rs.updateRow();
}
La base de données est mise à jour avec les valeurs correctes, mais je reçois l'exception suivante:
Optimistic concurrency check failed. The row was modified outside of this cursor.
Je l'ai googlé, mais n'a pas été capable de trouver de l'aide sur la question.
Comment empêcher cette exception? Ou puisque le programme fait ce que je veux faire, puis-je l'ignorer?
Pouvez-vous nous dire quel niveau d'isolation de transaction est utilisé? – ordnungswidrig
... et aussi ce que la requête exacte et la colonne exacte vous updateInt? – vladr