Foros del Web » Programación para mayores de 30 ;) » Java »

Transacciones con JDBC

Estas en el tema de Transacciones con JDBC en el foro de Java en Foros del Web. Buenas, estoy realizando un metodo que me permita importar de un fichero que posee sentencias SQL, Create e Insert, entonces quiero hacer mediante una transaccion, ...
  #1 (permalink)  
Antiguo 04/06/2012, 07:35
Avatar de rodno  
Fecha de Ingreso: enero-2009
Ubicación: En algun lugar de Cuba
Mensajes: 426
Antigüedad: 15 años, 3 meses
Puntos: 43
Transacciones con JDBC

Buenas, estoy realizando un metodo que me permita importar de un fichero que posee sentencias SQL, Create e Insert, entonces quiero hacer mediante una transaccion,
que se realice todo o nada, lo estoy realizando de la siguiente forma,

try {
conexion = new JDBCAdapter(Global.getConectionActive());
conexion.GetConnection().setAutoCommit(false);
java.sql.Statement stmt = conexion.GetConnection().createStatement();

for (int i = listTables.length - 1; i >= 0 ; i--) {
stmt.addBatch("TRUNCATE "+listTables[i]+";"); // Vaciar Tablas
}

for (int j = 0; j < querysArray.length; j++) {
stmt.addBatch(querysArray[j]+";"); // Ejecutar los Insert

}
int [] countCreateInsert = stmt.executeBatch();

conexion.GetConnection().commit(); //This commits the transaction and starts a new one.
conexion.GetConnection().setAutoCommit(true);
stmt.close();

}
catch (SQLException ex) {
ex.printStackTrace();
try {
System.out.println("Transaction failed.");
conexion.GetConnection().rollback();
System.out.println("rollBack.");
return false;
}
catch (SQLException se) {
se.printStackTrace();
System.out.println("Transaction failed2.");
return false;
}

}

Esto me funciona bien, pero cuando alguna de las consultas tiene un error, no me hace el rollback,

Son bastantes consultas no se si esto tendra que ver,

Gracias de ante mano
__________________
"No te preocupes si no funciona bien. Si todo lo hiciera, no tendrías trabajo."
"El problema no es no saber, sino no saber quién sabe"
..::Con Karma se piensa mejor::..
  #2 (permalink)  
Antiguo 04/06/2012, 16:07
 
Fecha de Ingreso: junio-2009
Mensajes: 13
Antigüedad: 14 años, 10 meses
Puntos: 1
Respuesta: Transacciones con JDBC

Me parece que tendrías que definir una variable de tipo int, por ejemplo:
private int huboError = 0;

Luego, abrir una transacción. Ejemplo:
BEGIN WORK;

Y en cada catch (por que hubo error ) haces la asignación de la variable. Ejemplo:
huboError++;

luego de ejecutar tus consultas evalúas si la variable huboError es igual a cero, haces el commit, de lo contrario haces el rollback;

No sé si he sido lo bastante claro.

Saludos!

Gustavo Echenique
  #3 (permalink)  
Antiguo 04/06/2012, 21:42
Avatar de zero0097  
Fecha de Ingreso: abril-2010
Ubicación: México
Mensajes: 481
Antigüedad: 14 años
Puntos: 69
Respuesta: Transacciones con JDBC

Las transacciones comienzan con BEGIN y terminan con COMMIT aplicando los cambios, o con ROLLBACK para no aplicarlos...

Código:
//teniendo un objeto:
            Connection conexion;
//inicia la transacción
conexion.setTransactionIsolation(Connection.TRANSACTION_SERIALIZABLE);
            //Indicamos que no queremos modificar nada hasta que reciba commit o rollback
            conexion.setAutoCommit(false);    

//finaliza con commit
conexion.commit();

//con rollback
conexion.rollback();
__________________
De nada, hay te encargo +1...

Etiquetas: jdbc, transacciones
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 21:08.