2013-06-11 3 views
0

Comment distribuez-vous un appel JDBC unique Postgres qui comprend 2 instructions select? Les deux instructions de sélection sélectionnent des ensembles de tables différents et renvoient deux ensembles de résultats différents. Elles ne peuvent donc pas être regroupées. L'objectif est de faire en sorte que ce qui est lu à partir de la base de données est une image cohérente des données dans les tableaux à l'instant les problèmes sont sélectionne. Si deux instructions select distinctes sont émises, il est possible que certaines données soient mises à jour après la première sélection et avant la seconde.postgres plusieurs instructions select JDBC dans le lot

Regardez comme addBatch de java.sql.Statement() et executeBatch() ne peut pas être utilisé - cela ne peut être utilisé pour les mises à jour. Tenter de l'utiliser avec des sélections provoque une PSQLException avec le message "Un résultat a été renvoyé lorsque rien n'était prévu". sur executeBatch().

Répondre

2

Vous n'avez pas besoin de sauter à travers des cerceaux pour ce tout. Juste BEGIN une transaction dans SERIALIZABLE l'isolement et les deux déclarations verront une vue cohérente des données.

Voir the JDBC tutorial.

Il n'existe pas d'autre moyen de garantir que deux instructions voient les mêmes données. Vous pouvez les envoyer ensemble, mais à moins d'être enveloppés dans une transaction, ils peuvent toujours voir des données différentes.

Questions connexes