Question

Est-ce que Java Connection.close retourne dans un bloc finally?.

Je sais. Net SqlConnection.close le fait.

Avec cela, je pourrais faire essayer / enfin des blocs sans prise ...

Exemple:

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

    conn.commit();
} finally {
   conn.close();
}
Était-ce utile?

La solution

Selon le javadoc , vous devez essayer de valider ou de revenir en arrière avant d’appeler la méthode close. Autrement, les résultats sont définis par la mise en oeuvre.

Autres conseils

Dans tous les systèmes de base de données avec lesquels j'ai travaillé, il n'y a pas de mal à effectuer une restauration juste après la validation. Par conséquent, si vous validez dans le bloc try et que, finalement, les choses sont validées, alors que si une exception ou Si le retour prématuré a pour effet d'omettre le commit, l'annulation annule la transaction. Donc, la chose à faire est

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

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

Le pilote JDBC d’Oracle s’engage par défaut sur close (). Vous ne devez pas vous fier à ce comportement si vous avez l’intention d’écrire du code JDBC multiplate-forme.

Le comportement est complètement différent entre les différentes bases de données. Exemples:

Oracle

La transaction est validée lors de la fermeture de la connexion avec une transaction ouverte (comme l'indiquent @M. Shiny et New ?.

SQL Server

  

L’appel de la méthode close au milieu d’une transaction provoque la   transaction à annuler.

Méthode close (SQLServerConnection)

Il est inutile de revenir en arrière dans un blocage final. Une fois que vous avez validé et que la validation est réussie, pourquoi revenir en arrière? Donc, si j'étais vous, je reviendrais en bloc.

Pour MySQL JDBC, l’implémentation rétablit la connexion si elle est fermée sans appel aux méthodes commit ou annulation.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top