Domanda

Java Connection.clude il rollback in un blocco finally ?.

Lo so .Net SqlConnection.close lo fa.

Con questo ho potuto provare / finalmente a bloccare senza prendere ...

Esempio:

try {
    conn.setAutoCommit(false);
    ResultSet rs = executeQuery(conn, ...);
    ....
    executeNonQuery(conn, ...);
    ....

    conn.commit();
} finally {
   conn.close();
}
È stato utile?

Soluzione

Secondo javadoc , dovresti provare a eseguire il commit o il rollback prima di chiamare il metodo close. In caso contrario, i risultati sono definiti dall'implementazione.

Altri suggerimenti

In qualsiasi sistema di database con cui ho lavorato, non c'è nulla di male nel fare un rollback subito dopo il commit, quindi se commetti nel blocco try e rollback nel infine, le cose vengono impegnate, mentre se un'eccezione o la restituzione anticipata causa la perdita del commit, il rollback eseguirà il rollback della transazione. Quindi la cosa sicura da fare è

try {
    conn.setAutoCommit(false);
    ResultSet rs = executeQuery(conn, ...);
    ....
    executeNonQuery(conn, ...);
    ....

    conn.commit();
} finally {
   conn.rollback();
   conn.close();
}

Il driver JDBC di Oracle si impegna su close () per impostazione predefinita. Non devi fare affidamento su questo comportamento se intendi scrivere codice JDBC multipiattaforma.

Il comportamento è completamente diverso tra database diversi. Esempi:

Oracle

La transazione viene impegnata quando si chiude la connessione con una transazione aperta (come indicato da @Mr. Shiny e New ? ?.

SQL Server

  

La chiamata al metodo close nel mezzo di una transazione provoca il   transazione da ripristinare.

Metodo di chiusura (SQLServerConnection)

È inutile eseguire il rollback nel blocco infine. Dopo aver eseguito il commit e il commit ha esito positivo, perché ripristinare? Quindi se fossi in te, farei un rollback nel blocco catch.

Per MySQL JDBC, l'implementazione ripristina la connessione se chiusa senza una chiamata ai metodi di commit o rollback.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top