2011-02-01 16 views
8

Estoy intentando ejecutar dos consultas insertadas en una Statement, juntándolas en una transacción.Ejecuta dos consultas diferentes en una transacción

yo estaba buscando en el método addBatch, pero si he entendido bien que se puede utilizar con una sola PreparedStatement para ejecutar la misma inserción varias veces con diferentes parámetros, o ser utilizado en un objeto Statement para añadir más consultas al lote , pero sin la posibilidad de agregar parámetros (por lo que podría agregar los valores en la cadena sql. Estilo de inyección de SQL).

También probé un enfoque ingenuo de escribir ambas inserciones en una declaración SQL (insert into table1 values(?, ?); insert into table2 values(?, ?);), pero de esta manera el PreparedStatement solo ve los dos primeros parámetros, y tratando de establecer la tercera y la cuarta tira una excepción.

+3

Por curiosidad, ¿cuál es su razón para no querer usar dos 'PreparedStatement' en la misma transacción? ¡Eso haría tu vida más fácil! –

+0

Sí, supongo que no hay una razón especial para no hacer eso, aparte de no pensar en ello. Gracias por mencionarlo. –

Respuesta

22

Puede desactivar la ejecución automática, ejecutar dos estados separados y luego confirmar una transacción manualmente:

connection.setAutoCommit(false); 
try { 
    ... 
    stmt1.execute(); 
    ... 
    stmt2.execute(); 
    connection.commit(); 
} catch (Exception ex) { 
    connection.rollback(); 
} 
Cuestiones relacionadas