2011-09-09 6 views
2

Je dois effectuer une transaction JDBC considérablement longue. Puis-je distribuer les instructions requises pour la transaction dans plusieurs méthodes, comme ceci?Distribuer des instructions pour une transaction JDBC dans plusieurs méthodes

try { 
    // ... Get connection 
    // Start transaction 
    connection.setAutoCommit(false); 
    // In every one of these methods a series of statements is executed 
    // All methods throw a SQLException which is caught here for rollback 
    // Every method takes this connection as an argument 
    method1(connection); 
    method2(connection); 
    // ... 
    methodN(connection); 
    // Commit all changes done inside the methods 
    connection.commit(); 
} catch (SQLException e) { 
    connection.rollback(); 
} finally { 
    connection.setAutoCommit(true); 
    connection.close(); 
} 
+0

Qu'est-ce qui vous fait penser que cela * ne fonctionnerait pas? –

+0

Je ne suis pas sûr si la portée des objets Statement à l'intérieur des méthodes est liée de quelque façon que ce soit. Les instructions n'existent pas après le retour d'une méthode et je ne sais pas comment les requêtes exécutées sont "stockées" pendant l'exécution du programme. Sont-ils "liés" à l'objet Connection au lieu de l'objet Statement? –

Répondre

1

Je ne vois aucun problème avec cela. L'important est de s'assurer que vous fermez la connexion lorsque vous avez terminé, que faites-vous là. Je m'assurerais que le code qui ouvre la connexion est dans la même méthode où il la ferme, parce que les fuites de connexion peuvent être vraiment difficiles à traquer.

En note, j'aime utiliser la fonctionnalité JDBC de Spring. Il gère les connexions pour vous et est vraiment facile à utiliser. http://static.springsource.org/spring/docs/current/spring-framework-reference/html/jdbc.html

+1

Merci pour le lien! Je peux essayer d'utiliser Spring. –

+1

Je voudrais deuxième (et troisième) la recommandation de printemps. Pourquoi écrire vous-même? Ils l'ont fait magnifiquement. – duffymo

1

Deux choses à corriger:

Les deux méthodes rollback() et close() sur java.sql.Connection jet SQLException. Vous devriez envelopper les deux appels dans les blocs try/catch pour assurer le bon fonctionnement. (Dans votre cas, le code ne sera même pas compilé tel qu'il est écrit.)

+0

Merci pour la remarque! –

Questions connexes