web-dev-qa-db-fra.com

java.sql.SQLException: Impossibilité de commettre avec la validation automatique définie sur Oracle.jdbc.driver.PhysicalConnection.commit (PhysicalConnection.Java:4443)

Je viens de mettre à jour le nouveau pilote jdbc de classes12.jar vers ojdbc7.jar

Mon application a lancé une exception lors de son exécution avec ojdbc7.jar:

Java.sql.SQLException: Could not commit with auto-commit set on
    at Oracle.jdbc.driver.PhysicalConnection.commit(PhysicalConnection.Java:4443)
    at Oracle.jdbc.driver.PhysicalConnection.commit(PhysicalConnection.Java:4490)
    at Oracle.jdbc.driver.T4CConnection.doSetAutoCommit(T4CConnection.Java:943)
    at Oracle.jdbc.driver.PhysicalConnection.setAutoCommit(PhysicalConnection.Java:4

Mon application fonctionne toujours normalement avec classes12.jar.

J'ai fait des recherches sur Oracle:

Cette exception est déclenchée pour l'un des cas suivants:

  • Lorsque le statut de validation automatique est défini sur true et que la méthode commit ou rollback est appelée
  • Lorsque le statut par défaut de validation automatique n'est pas modifié et que la méthode commit ou rollback est appelée
  • Lorsque la valeur de la propriété COMMIT_ON_ACCEPT_CHANGES est true et qu'une méthode commit ou rollback est appelée après l'appel de la méthode acceptChanges sur un ensemble de lignes

Mais je ne pouvais pas trouver d'erreur dans ma source. S'il vous plaît aidez-moi à donner plus d'explications sur cette erreur.

9
scarework

Les derniers pilotes OJDBC sont plus compatibles qu’ils ne l’étaient. Vous pouvez désactiver ce comportement pour le code hérité:

-Doracle.jdbc.autoCommitSpecCompliant=false

C'est une option de la JVM.

16
Olafur Tryggvason

Ce type d'exception se produit lorsque le pilote JDBC Oracle (ojdbc6.jar) version 12 ou supérieure est utilisé. La version 12 et supérieure du pilote est plus stricte que les versions antérieures du pilote.

Vous pouvez résoudre le problème, vous avez peu d'options:

  1. Remplacez le fichier jar par une ancienne version (au-dessous de 12, un problème survient généralement lors de la migration vers un nouveau serveur).
  2. Remplacez le comportement de la nouvelle version du fichier jar (ojdbc6.jar) par une configuration inférieure aux arguments de la machine virtuelle Java.

    -Doracle.jdbc.autoCommitSpecCompliant = false

    Utilisateurs IBM WAS, reportez-vous à ce lien :

  3. Définissez Auto Commit dans Java/SQL:

    Java:

    conn.setAutoCommit (false);

    Oracle:

    SET AUTOCOMMIT OFF

5
Rushi Daxini

Nous sommes IBM WAS v9 avec l’utilisation de ojbc6.jar. La configuration ci-dessus s’applique au serveur APP, à l’agent de nœud et à DMGR, puis cela fonctionne. 

-Doracle.jdbc.autoCommitSpecCompliant = false

Dmgr: Gestionnaire de déploiement> Définition de processus> Machine virtuelle Java Modifier "Arguments JVM génériques" 

NodeAgent: Agents de noeud> nodeagent> Définition de processus> Machine virtuelle Java 

WebSphere Application Server: Serveurs d'applications> WebSphere_Portal> Définition de processus> Machine virtuelle Java Modifier les "arguments génériques JVM" 

0
johnson tsang