Este artículo describe la implementación de Java de transacciones, transferencias bancarias y bienes dentro y fuera de los almacenes basados en JDBC. Compártelo para su referencia, como sigue:
1. Transferir negocios
Cuando la transferencia debe ejecutar 2 declaraciones SQL (actualizaciones de actualización) y ambos tienen éxito, se envía la transacción. Si uno falla, ambos retrocedirán la transacción.
2. Una transacción debe tener 4 atributos : atomicidad, consistencia, aislamiento y persistencia. Estos cuatro atributos generalmente se llaman atributos ácidos.
① Atomicidad. Una transacción es una unidad de trabajo inseparable, y todas las operaciones incluidas en la transacción se realizan o no.
② Consistencia. Una transacción debe ser cambiar la base de datos de un estado consistente a otro. La consistencia está estrechamente relacionada con la atomicidad.
③ Aislamiento. La ejecución de una transacción no puede ser interferida por otras transacciones. Es decir, las operaciones dentro de una transacción y los datos utilizados están aislados de otras transacciones concurrentes, y las transacciones ejecutadas simultáneamente no pueden interferir entre sí.
④ Durabilidad. La permanencia también se llama permanencia, lo que significa que una vez que se comete una transacción, sus cambios en los datos en la base de datos deben ser permanentes. Otras operaciones o fallas posteriores no deberían tener ningún impacto en ellas.
3. Aquí hay una descripción de demostración utilizando la operación de transferencia como caso, y los puntos de atención son los siguientes:
(1) Una operación de instrucción SQL no requiere el envío de transacciones manuales
(2) La operación de consulta no requiere envío de transacciones manuales.
(3) Sin embargo, actualizar, insertar y eliminar requiere envío de transacciones manuales
(4) Si el saldo es negativo, puede consultar los resultados primero y luego hacer un juicio, y luego operar
(5) con.setAutoCommit(false); comenzar manualmente la transacción; con.commit(); cometer manualmente la transacción; con.rollback(); Operación de reversión de transacciones
4. Primero cree una tabla de datos o dos tablas de datos. Aquí, cree dos tablas de datos para mayor claridad de demostración.
5. Cree una base de datos y una tabla de datos, y luego escriba la clase de herramientas baseo.java
paquete com.bie.utils; import java.sql.connection; import java.sql.drivermanager; import java.sql.preparedStatement; import java.sql.ressset; import java.sql.sqlexception;/*** @author biehongli* @version creado: febrero 27, 2017 At 10:099. Clase para conectarse a la base de datos*/public class BaseAo {private static string controlador = "com.mysql.jdbc.driver"; String static privado url = "JDBC: mysql: /// test"; String estático privado user = "root"; Password de cadena estática privada = "123456"; /*** * Método para conectarse a la base de datos * @return * @throws classnotFoundException * @throws sqlexception */public static Connection getCon () lanza classnotFoundException, sqlexception {class.forname (controlador); // Cargue el sistema de controladores de datos.out.Println (prueba la carga de la base de datos con éxito ");); Conexión con = drivermanager.getConnection (url, usuario, contraseña); System.out.println ("Test Database Link con éxito"); devolver esta }/ *** * Método para cerrar la base de datos * @param Con * @param ps * @param rs */ public static void Close (Connection Con, PrepareStatement PS, ResultSet rs) {if (rs! = Null) {// Cerrar el recurso para evitar la excepción try {rs.close (); } Catch (Sqlexception e) {// TODO BLOCK AUTO GENERADO E.PRINTSTACKTRACE (); }} if (ps! = null) {try {ps.close (); } Catch (Sqlexception e) {// TODO BLOCK AUTO GENERADO E.PRINTSTACKTRACE (); }} if (con! = null) {try {con.close (); } Catch (Sqlexception e) {// TODO BLOCK AUTO GENERADO E.PRINTSTACKTRACE (); }}} / *** * Acepta el método de agregar, eliminar y modificar * @param sql * @param arr * @return * / public static boolean addupDatedElete (string sql, object [] arr) {Connection con = null; Preparado PS = NULL; Pruebe {con = baseo.getCon (); // Paso 1: operación para conectarse a la base de datos ps = con.preparestatement (sql); // paso 2: precompila // paso 3: establecer el valor if (arr! = null && arr.length! = 0) {para (int i = 0; i <r.r.length; i ++) {ps.setObject (i+1, arri); }} int count = ps.ExecuteUpdate (); // Paso 4: Ejecute la instrucción SQL if (Count> 0) {return true; } else {return false; }} Catch (ClassNotFoundException e) {// TODO BLOQUE DE CATCA AUTO GENERADA E.PRINTSTACKTRACE (); } Catch (Sqlexception e) {// TODO BLOCK AUTO GENERADO E.PRINTSTACKTRACE (); } return false; } /*public static void main (string [] args) {try {baseAo.getCon (); } Catch (ClassNotFoundException e) {// TODO Auto Generado Bloque E.PrintStackTrace (); } Catch (Sqlexception e) {// TODO BLOCK AUTO GENERADO E.PRINTSTACKTRACE (); }}*/}6. La prueba se lleva a cabo directamente en el método principal, por lo que escribí userdao para las pruebas y solo mira el efecto.
paquete com.bie.dao; import java.sql.connection; import java.sql.preparedStatement; import java.sql.sqlexception; import com.bie.utils.baseSao;/*** @author biehongli*@version Creation Time: 27 de febrero, 2017 a las 3:19:49 pm ** * Nota: * (1) Una operación de instrucción SQL no requiere el envío de transacciones manuales * (2) La operación de consulta no requiere envío de transacciones manuales, * (3) Sin embargo, actualizar, insertar y eliminar requiere envío de transacciones manuales * (4) Si el saldo es negativo, puede consultar el resultado primero y luego juzgarlo, y luego operar it * @param args */ public void void void (string [] [] [] args primero) y luego juzgarlo; Preparado PS1 = NULL; Preparado en ps2 = nulo; Pruebe {// Paso 1: la operación de conectarse a la base de datos con = baseAo.getCon (); // La transacción se envía automáticamente de forma predeterminada, por lo que el valor predeterminado es verdadero. Ahora cambie verdadero a FALSO, y la transacción automática predeterminada está prohibida //con.setAutOcommit(true); // Transacción 1: si se establece en falso, la transacción debe enviarse manualmente con.setAutOcommit (falso); // Paso 2: la cadena de instrucción SQL actualizada sql = "actualizar bank_a set userA_rmb = userA_RMB-500 donde userA_id = 1"; Cadena sql2 = "actualizar bank_b set userb_rmb = userb_rmb+500 donde userb_id = 1"; // Paso 3: Precompilar SQL PS1 = Con.PrepareStatement (SQL); // Paso 4: Ejecute la instrucción SQL. Aunque SQL se ha ejecutado, no se ha persistido y actualizado a la base de datos PS1.ExecuteUpdate (); // Paso 3: Precompilar SQL2 PS2 = Con.PrepareStatement (SQL2); // Paso 4: Ejecutar SQL2. Aunque SQL2 se ejecuta, no se ha persistido y actualizado a la base de datos ps2.ExecuteUpdate (); System.out.println ("Transferir exitoso ..."); // Transacción 2: cometer manualmente la transacción. Si ambas ejecuciones son exitosas, entonces confirme la transacción con.commit (); } catch (ClassNotFoundException e) {E.PrintStackTrace (); Pruebe {// Transacción 3: si se lanza una excepción, luego vuelva a revertir la transacción con.rollback (); } catch (sqlexception e1) {e1.printstackTrace (); }} Catch (SQLException e) {E.PrintStackTrace (); } Finalmente {// cerrar el recurso para evitar excepciones a base de basada.close (Con, PS1, NULL); BaseAo.close (NULL, PS2, NULL); }}}El efecto de demostración es el siguiente:
Para obtener más información sobre el contenido relacionado con Java, consulte los temas de este sitio: "Resumen de las habilidades de Java para operar bases de datos utilizando JDBC", "Resumen del Java+MySQL Base de datos Programación", "Tutorial de la estructura de datos de Java y Algoritmo", "Summar de Java y Habilidades de operación de directorio", "Summary of Java Skills Node Node Node Node Node Node Nodeworitm", y "Summar de Java Copo Copil Habilidades"
Espero que este artículo sea útil para la programación Java de todos.