it-swarm.com.de

java.sql.SQLException: Konnte nicht mit automatischem Commit festgelegt werden, das für Oracle.jdbc.driver.PhysicalConnection.commit festgelegt ist (PhysicalConnection.Java:4443)

Ich habe gerade ein Upgrade auf den neuen jdbc-Treiber von classes12.jar auf ojdbc7.jar durchgeführt

Meine App hat eine Ausnahme ausgelöst, als mit ojdbc7.jar ausgeführt wurde:

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

Meine App läuft weiterhin normal mit classes12.jar.

Ich habe über Oracle recherchiert:

Diese Ausnahme wird für einen der folgenden Fälle ausgelöst:

  • Wenn der Auto-Commit-Status auf true festgelegt ist und die Commit- oder Rollback-Methode aufgerufen wird
  • Wenn der Standardstatus des automatischen Commits nicht geändert wird und die Commit- oder Rollback-Methode aufgerufen wird
  • Wenn der Wert der Eigenschaft COMMIT_ON_ACCEPT_CHANGES auf true gesetzt ist und die Commit- oder Rollback-Methode nach dem Aufrufen der AcceptChanges-Methode für ein Rowset aufgerufen wird

Aber ich konnte keinen Fehler in meiner Quelle finden. Bitte helfen Sie mir, diesen Fehler näher zu erläutern.

9
scarework

Die neuesten OJDBC-Treiber sind kompatibler als sie wo. Sie können dieses Verhalten für älteren Code deaktivieren:

-Doracle.jdbc.autoCommitSpecCompliant=false

Es ist eine JVM-Option.

16

Diese Art von Ausnahmen tritt auf, wenn der Oracle JDBC-Treiber (ojdbc6.jar) Version 12 oder höher verwendet wird. Version 12 und höher des Treibers ist strenger als frühere Treiberversionen.

Sie können das Problem lösen, Sie haben nur wenige Möglichkeiten:

  1. JAR-Datei in alte Version ändern (unter 12; normalerweise tritt das Problem bei der Migration auf einen neuen Server auf)
  2. Überschreiben Sie das Verhalten der neuen Jar-Version (ojdbc6.jar) mit einer Einstellung unter den JVM-Argumenten.

    -Doracle.jdbc.autoCommitSpecCompliant = false

    IBM WAS-Benutzer verweisen auf diesen Link :

  3. Auto Commit in Java/SQL deaktivieren:

    Java:

    conn.setAutoCommit (false);

    Orakel:

    AUTOCOMMIT OFF einstellen

5
Rushi Daxini

Ursache -

PhysicalConnector.Java in ojdbc6

public void commit(int paramInt) throws SQLException {
    disallowGlobalTxnMode(114);
    if (this.lifecycle != 1) {
        SQLException sQLException = DatabaseError.createSqlException(getConnectionDuringExceptionHandling(), 8);
        sQLException.fillInStackTrace();
        throw sQLException;
    }
    .
    .

PhysicalConnector.Java in ojdbc7

public void commit(int paramInt) throws SQLException {
    disallowGlobalTxnMode(114);
    ​if (this.autoCommitSpecCompliant && getAutoCommit()) {
        throw (SQLException)DatabaseError.createSqlException(getConnectionDuringExceptionHandling(), 273).fillInStackTrace();
    }
    if (this.lifecycle != 1) {
        SQLException sQLException = DatabaseError.createSqlException(getConnectionDuringExceptionHandling(), 8);
        sQLException.fillInStackTrace();
        throw sQLException;
    ​}
    .
    .

Wir können sehen, dass in ojdbc7 ein Stück Code eingeführt wurde. Wenn autoCommitSpecCompliant und getAutoCommit() beide wahr sind, erhalten wir eine Ausnahme.

Zwei Fix verfügbar -

  1. setze autoCommitSpecCompliant auf false
    Unterhalb des einzustellenden JVM-Parameters
    -Doracle.jdbc.autoCommitSpecCompliant=false

  2. nter Code einfügen vor connection.commit()

connection.setAutoCommit(false);

0
vinS

Wir sind IBM WAS v9 mit der Verwendung von ojbc6.jar. Über configure auf APP Server, Node Agent und DMGR angewendet, dann funktioniert es. 

-Doracle.jdbc.autoCommitSpecCompliant = false

Dmgr: Deployment Manager> Prozessdefinition> Java Virtual Machine Ändern Sie "Generische JVM-Argumente". 

NodeAgent: Knotenagenten> nodeagent> Prozessdefinition> Java Virtual Machine 

WebSphere Application Server: Anwendungsserver> WebSphere_Portal> Prozessdefinition> Java Virtual Machine Ändern "Generische JVM-Argumente" 

0
johnson tsang