Mejores prácticas para la confirmación automática declaraciones en Java para el uso de MySQL a través de JDBC

Rob:

Dentro de mi interactúan código Java I con una base de datos MySQL a través de una conexión JDBC. I fijó una conexión y algunas declaraciones (para su reutilización)

            connect = DriverManager.getConnection(connectionstring);            
            statement = connect.createStatement();
            statement2 = connect.createStatement();

Durante la mayor parte del código, Statement.executeQuery (consulta) está bien, pero algunas operaciones son "bloques", por lo que necesito para asegurarse de que o bien todos van a través de juntas, o ninguno de ellos. Creo que el siguiente código logra esto.

            connect.setAutoCommit(false);
            statement.addBatch(insertquery1);
            statement.addBatch(insertquery2);
            statement.addBatch(insertquery3);
            statement.addBatch(insertquery4);
            statement.executeBatch();
            connect.commit();           
            connect.setAutoCommit(true);

Por lo que yo puedo decir, las llamadas se conectan afectan a toda la conexión, por lo que tendría un impacto tanto declaración y sentencia2. También, aparentemente puede establecer los valores de confirmación automática después creé el objeto de declaración y que todavía se aplica a ella. ¿Es esto correcto? Y sería mejor práctica / más eficiente para dividirlas y mantener un objeto de conexión diferente sólo para llamadas de confirmación automática, como más adelante?

            // objects purely for batch operations
            connect = DriverManager.getConnection(connectionstring);            
            connect.setAutoCommit(false);
            statement = connect.createStatement();
            // objects for normal operations
            connect2 = DriverManager.getConnection(connectionstring);           
            connect2.setAutoCommit(true);
            statement2 = connect2.createStatement();

En mi solicitud que representan menos del 1% de las llamadas, pero sí necesita ese porcentaje por hacer en lotes. ¿Cuál es la mejor práctica?

Tim Biegeleisen:

El punto de configuración automática se comprometen a falso es para que varias sentencias SQL pueden correr todos dentro de la misma transacción. Y, si algo va mal con cualquiera de sus 4 instrucciones de inserción, toda la transacción sería lógicamente puede rodar hacia atrás, para que no terminen con los datos inconsistentes en su base de datos. El patrón que ya se está siguiendo es la mejor práctica:

connect.setAutoCommit(false);
statement.addBatch(insertquery1);
statement.addBatch(insertquery2);
statement.addBatch(insertquery3);
statement.addBatch(insertquery4);
statement.executeBatch();
connect.commit();           
connect.setAutoCommit(true);

Es decir, es mejor práctica para retorno automático comprometerse a ser cierto después de que haya completado su transacción. Esto es para que cualquier otra parte de su código, o tal vez su futuro código, deberían otra persona heredarlo, que sigue utilizando el mismo objeto de conexión recibirían el comportamiento predeterminado de automóviles cometen siendo cierto.

Supongo que te gusta

Origin http://10.200.1.11:23101/article/api/json?id=389876&siteId=1
Recomendado
Clasificación