2011-11-23 19 views
6

Tengo dos bloques de consultas con preparedStatement.Gestión de transacciones Postgresql con java

Esta es la primera:

String sql = "update cikan_malzeme set miktar = ? where proje_id = ? and malzeme_id = ?"; 
PreparedStatement prep = dbConnect.connection.prepareStatement(sql); 
prep.setFloat(1, toplam); 
prep.setInt(2, pid); 
prep.setInt(3, mid); 
prep.executeUpdate(); 

Y esta es la segunda:

String sql2 = "update malzemeler set miktar = ? where malz_adi = ?"; 
PreparedStatement prep2 = dbConnect.connection.prepareStatement(sql2); 
prep2.setFloat(1, fark); 
prep2.setString(2, malzemeadi); 
prep2.executeUpdate(); 

ahora quiero ejecutarlos con la transacción COMENZAR; y COMPROMETER; ¿Cómo puedo manejar la transacción con preparedStatement?

Gracias de antemano.

Respuesta

8

Establecer el compromiso automático en falso.

Ponga sus estados preparados en un bloque de prueba. Comprométete al final; retroceder en el bloque catch.

Así es como generalmente se hace en huesos desnudos JDBC.

http://docs.oracle.com/javase/tutorial/jdbc/basics/transactions.html

Si utiliza EJB3 o primavera puede agregar un administrador de transacciones y especificarlos de forma declarativa. Eso es más sofisticado y flexible.

+0

lo hace necesario en el modo automático comprometerse para SELECCIONAR consultas como setAutoCommit (verdadero) después de crear sesión o configurar en hibernación de archivo? Estoy usando hibernate con postgresql. – Satya

+0

No hay necesidad de lógica transaccional si está haciendo un SELECTO en sí mismo. Es para escribir transacciones y administrar el segmento de reversión – duffymo

+0

Solo es necesario para consultas no seleccionadas y para consultas de selección no es obligatorio – Satya

6

Debe usar Connection.setAutoCommit(false) para deshabilitar la confirmación automática y Connection.commit() y Connection.rollback().

Cuando la confirmación automática está desactivada, una transacción se iniciará automáticamente la primera vez que ejecute un comando o consulta que requiera una transacción.

Usted no debe utilizar los comandos de control de transacción específica de base de datos (como el conductor lo más probable es hacer la limpieza adicional de recursos cuando un commit() o rollback() se emite.

+0

¿Es necesario en el modo de confirmación automática para SELECCIONAR consultas como setAutoCommit (verdadero) después de crear la sesión o configurar en el archivo de hibernación? Estoy usando hibernate con postgresql. – Satya

+0

@Satya por favor publique una nueva pregunta, los comentarios no están destinados para preguntas de seguimiento. –

+0

Claro. ¿Existe algún duplicado, pero no encontró nada, puede compartir cualquier enlace – Satya

Cuestiones relacionadas