Si la conexión JDBC está en modo automático, es de manera predeterminada, entonces cada instrucción SQL está comprometida con la base de datos cuando se completa.
Esto puede ser para aplicaciones simples, pero por tres razones es posible que desee desactivar la confirmación automática y administrar sus propias transacciones:
Para controlar las transacciones y cuando se aplican cambios a la base de datos. Se necesita una sola instrucción SQL o un conjunto de declaraciones SQL como unidad lógica, y si alguna declaración falla, la transacción completa falla.
Para habilitar, en lugar de los controladores JDBC utilizando el soporte de transacción manual de modo automático de autocomisión de forma predeterminada, use el método setauToCommit () del objeto de conexión. Si se pasa un valor booleano a setauToCommit (), desactive la confirmación automática. Se puede pasar a un valor booleano a verdad para reabrirlo.
Por ejemplo, si hay un objeto llamado Conn Connection, el siguiente código apagará la confirmación automática:
conn.setAutOcommit (falso);
Enviar y reversión
Una vez que se hayan completado los cambios, desea confirmar los cambios y luego llamar al método Conjunto (en el objeto de conexión) de la siguiente manera:
conn.commit ();
De lo contrario, las actualizaciones de reversión que se realizan en la base de datos utilizan Connection Conn con nombre, utilizando el siguiente código:
conn.rollback ();
El siguiente ejemplo demuestra cómo usar un objeto de confirmación y reversión:
intente {// asumir un objeto de conexión válido conn.setAutOcommit (falso); Instrucción stmt = conn.createStatement (); 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', 'Singh')"; stmt.ExecuteUpdate (SQL); // Si no hay error. conn.commit ();} Catch (Sqlexception SE) {// Si hay algún error. conn.rollback ();}En este caso, ninguna declaración de inserción anterior tendrá éxito y todo se volverá hacia atrás.
Ejemplos de confirmación de transacción y reversión
El siguiente es un ejemplo de uso de la descripción de transacción y reversión.
Este código de muestra se ha aprendido en función del entorno y la instalación de la base de datos en el capítulo anterior.
Copie el jdbcexample.java del siguiente ejemplo en el pasado, compilar y ejecutar, como se muestra a continuación:
// 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 crear un en cuenta con // argumentos requeridos para el ejemplo RS. System.out.println ("Creación de declaración ..."); stmt = conn.createStatement (resultset.type_scroll_insensitive, resultset.concur_updatable); // Paso 6: inserte una fila en la tabla de empleados System.out.println ("Insertar una fila ..."); String sql = "Insertar en los valores de los empleados" + "(106, 20, 'rita', 'tez')"; stmt.ExecuteUpdate (SQL); // Paso 7: Inserte una fila más en la tabla de empleados sql = "insertar en los valores de los empleados" + "(107, 22, 'Sita', 'Singh')"; stmt.ExecuteUpdate (SQL); // Paso 8: Conjunto de datos aquí. System.out.println ("Comprender datos aquí ..."); conn.commit (); // Paso 9: 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 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
Conectarse a la base de datos ... creación de la declaración ... insertar una fila .... cometer datos aquí .... de la lista Conjunto de resultados de la lista .... id: 100, edad: 18, primero: Zara, último: Aliid: 101, edad: 25, primero: mahnaz, último: fatmaid: 102, edad: 30, primero: zaid, último: khanid: 103, edad: 28, último, último: mittalid: 106, edad: 20, zaid, último: Último: 103, edad: 28, último, último: mittalid: 106, edad: 20, 20, Última, Última, más Tezida: 107, Edad: 22, Primero: Sita, último: ¡Singhgoodbye!