2010-11-09 8 views
0

Comment se comportent les transactions; Si j'utiliser la syntaxe suivante pour exécuter plusieurs DML à l'aide unique java.sql.StatementExécuter DML multiples sur java.sql.Statement unique

String sqlStr = "INSERT INTO.... \n update t1 set...."; 

statemet.execute(sqlStr); 

Je ne suis pas en train de modifier paramètre de connexion par défaut (autocommit = true).

Je suis conscient que ce n'est pas la bonne façon/les meilleures pratiques; juste curieux de connaître la nature transactionnelle du code ci-dessus Si la mise à jour échoue avec SQLException, insérera l'annulation?

Répondre

1

Avec autocommit ensemble true, les déclarations individuelles exécuteraient très probablement dans leurs propres transactions individuelles. Cela pourrait dépendre de la base de données, mais je ne le soupçonne pas.

La meilleure façon de le savoir est de l'essayer.

0

Nous avons essayé, a obtenu des résultats surprenants avec MS SQL Server 2008

J'ai essayé 2 déclarations de mise à jour et que par observation ils courent en une seule transaction; c'est-à-dire si la deuxième mise à jour échoue, la première instruction de mise à jour est annulée.

La chose surprenante est que j'ai remarqué:

https://connect.microsoft.com/SQLServer/feedback/details/620522/invalid-object-exception-not-thrown-by-com-microsoft-sqlserver-jdbc-sqlserverdriver#

+0

Dans ce genre de situation, vous pouvez faire rouler SQL Server arrière des déclarations antérieures (ou non) en utilisant SET XACT_ABORT: http://msdn.microsoft.com/en-us/library/ms188792.aspx –

0

J'ai essayé dans un environnement MySQL. Cela a très bien fonctionné. Et je pense que c'est le moyen de base pour le faire.

Questions connexes