La nueva interfaz JDBC3.0 SavePoint proporciona un control de transacciones adicional. La mayoría de los DBM modernos admiten puntos de guardado en sus entornos, como Oracle PL/SQL.
Defina un punto de reversión lógica en la transacción al configurar un punto de guardado. Si se produce un error cuando se ha pasado un punto de guardado, puede usar el método de reversión para deshacer todos los cambios o solo los cambios realizados después del punto de guardado.
Hay dos nuevos métodos para objetos de conexión para ayudar a administrar los puntos de guardado:
setSavePoint (string savePointName): define un nuevo SavePoint. También devuelve un objeto SavePoint.
LeterseSeaSavePoint (savePoint savePointName): elimine un punto de guardado. Tenga en cuenta que requiere un objeto SavePoint como parámetro. Este objeto generalmente se genera mediante el método setSavePoint ().
Hay un método Rollback (String SavePointName) que vuelve al punto de guardado especificado.
El siguiente ejemplo demuestra cómo usar un objeto SavePoint:
intente {// asumir un objeto de conexión válido conn.setAutOcommit (falso); Instrucción stmt = conn.createStatement (); // Establecer un SavePoint SavePoint SavePoint1 = Conn.SetSavePoint ("SavePoint1"); String sql = "Insertar en los valores de los empleados" + "(106, 20, 'rita', 'tez')"; stmt.ExecuteUpdate (SQL); // Enviar una declaración SQL malformada que rompe la cadena SQL = "Insertado en los valores de los empleados" + "(107, 22, 'Sita', 'Tez')"; stmt.ExecuteUpdate (SQL); // Si no hay error, confirme los cambios. conn.commit ();} Catch (Sqlexception SE) {// Si hay algún error. conn.rollback (savePoint1);} En este caso, ninguna declaración de inserción anterior tendrá éxito y todo se volverá hacia atrás.
A continuación se muestra un ejemplo del uso de setSavePoint y tutorial de transacciones para describir la reversión.
Se ha explicado este código de muestra basado en el entorno y la instalación de la base de datos en el capítulo anterior.
Copie el siguiente ejemplo jdbcexample.java, compile y ejecute lo siguiente:
// Paso 1. Importar PackagesImport requerido java.sql.*; Clase pública JDBCEXAMPLE {// JDBC Nombre del controlador y base de datos URL estática Cadena final JDBC_DRIVER = "com.mysql.jdbc.driver"; cadena final estática db_url = "jdbc: mysql: // localhost/emp"; // credenciales de base de datos static final cadena user = "UserName"; static final string pass = "contraseña"; public static void main (string [] args) {Connection conn = null; Instrucción stmt = null; Pruebe {// Paso 2: Registre JDBC Driver Class.forname ("com.mysql.jdbc.driver"); // Paso 3: abra un sistema de conexión.out.println ("Conectarse a la base de datos ..."); conn = drivermanager.getConnection (db_url, usuario, pase); // Paso 4: Establezca Auto Commit como falso. conn.setAutOcommit (falso); // Paso 5: Ejecute una consulta para eliminar el enmienda con // argumentos requeridos para el ejemplo RS. System.out.println ("Creación de declaración ..."); stmt = conn.createStatement (); // Paso 6: ahora enumere todos los registros disponibles. Cadena sql = "Seleccionar ID, primero, último, edad de los empleados"; ResultSet rs = stmt.executeQuery (sql); System.out.println ("Lista de resultados Conjunto de referencia ..."); printrs (RS); // Paso 7: Eliminar filas que tengan un rallador de identificación que 104 // pero guarde el punto antes de hacerlo. SavePoint savePoint1 = conn.setSavePoint ("ROWS_DELETED_1"); System.out.println ("Eliminar la fila ..."); Cadena sql = "eliminar de los empleados" + "donde id = 110"; stmt.ExecuteUpdate (SQL); // Ups ... ¡Eliminamos empleados demasiado equivocados! // Paso 8: Revol éxito Los cambios Afectren Guardar Punto 2. Conn.Rollback (savePoint1); // Paso 9: Eliminar filas que tengan un rallador de identificación que 104 // pero guarde el punto antes de hacerlo. SavePoint savePoint2 = conn.setSavePoint ("ROWS_DELETED_2"); System.out.println ("Eliminar la fila ..."); Sql = "eliminar de los empleados" + "donde id = 95"; stmt.ExecuteUpdate (SQL); // Paso 10: ahora enumere todos los registros disponibles. sql = "Seleccionar ID, primero, último, edad de los empleados"; rs = stmt.executeQuery (sql); System.out.println ("Lista de resultados Conjunto de referencia ..."); printrs (RS); // Paso 10: entorno de limpieza rs.close (); stmt.close (); conn.close (); } catch (sqlexception se) {// manejar errores para jdbc se.printstackTrace (); // Si hay un error, vuelva a revertir los cambios. System.out.println ("Rodar datos aquí ..."); intente {if (conn! = null) conn.rollback (); } catch (sqlexception se2) {se2.printstacktrace (); } // end ty} capt (excepción e) {// manejar errores para class.forname E.PrintStackTrace (); } Finalmente {// Finalmente bloqueado para cerrar los recursos, intente {if (stmt! = null) stmt.close (); } catch (sqlexception se2) {} // nada que podamos hacer intentar {if (conn! = null) conn.close (); } catch (Sqlexception SE) {SE.PrintStackTrace (); } // fin finalmente intente} // end tre system.out.println ("¡Adiós!");} // end Main Public Public static void Printrs (ResultSet RS) lanza SQLException {// Asegúrese de comenzar con la primera fila rs.befirst (); while (rs.next ()) {// recuperar por columna nombre int id = rs.getInt ("id"); int age = rs.getInt ("edad"); Cadena primero = rs.getString ("primero"); Cadena last = rs.getString ("último"); // Muestra valores System.out.print ("Id:" + id); System.out.print (", edad:" + edad); System.out.print (", primero:" + primero); System.out.println (", último:" + Último); } System.out.println (); } // end printrs ()} // end jdbcexampleAhora compilemos el ejemplo anterior de la siguiente manera:
C:> javac jdbcexample.java
Cuando se ejecuta JDBCEXample, produce los siguientes resultados:
C:> java jdbcexample
Connecting to database...Creating statement...List result set for reference....ID: 95, Age: 20, First: Sima, Last: ChugID: 100, Age: 18, First: Zara, Last: AliID: 101, Age: 25, First: Mahnaz, Last: FatmaID: 102, Age: 30, First: Zaid, Last: KhanID: 103, Age: 30, First: Sumit, Last: MittalID: 110, Age: 20, First: Sima, Last: ChugDeleting row...Deleting row....List result set for reference....ID: 100, Age: 18, First: Zara, Last: AliID: 101, Age: 25, First: Mahnaz, Last: FatmaID: 102, Age: 30, First: Zaid, Last: KhanID: 103, Age: 30, First: Sumit, Last: MittalID: 110, Age: 20, First: Sima, Last: Chuggodbye!