example java mysql sql jdbc

java - mysql url connection example



MySQL y JDBC con rewriteBatchedStatements=true (1)

He estado leyendo, here , here y here sobre las ventajas de usar rewriteBatchedStatements=true

Si lo entendí bien, con rewriteBatchedStatements=true el JDBC empaquetará tantas consultas como sea posible en un solo paquete de red, reduciendo así la sobrecarga de la red. Estoy en lo cierto?

Entonces me viene a la max_allowed_packet que el valor definido en el servidor MySQL para max_allowed_packet puede causar problemas con las consultas (las consultas no se ejecutan en el servidor).

Entonces, mi segunda pregunta es, ¿JDBC conoce el valor asignado a max_allowed_packet y, por lo tanto, hace que el paquete sea más pequeño que el valor definido para max_allowed_packet o eso es algo que el desarrollador debe tener en cuenta?

Si entendí algo mal, házmelo saber también.


con rewriteBatchedStatements = true, el JDBC empaquetará tantas consultas como sea posible en un solo paquete de red, reduciendo así la sobrecarga de la red. Estoy en lo cierto?

Si. El siguiente código

String myConnectionString = "jdbc:mysql://localhost:3307/mydb?" + "useUnicode=true&characterEncoding=UTF-8"; try (Connection con = DriverManager.getConnection(myConnectionString, "root", "whatever")) { try (PreparedStatement ps = con.prepareStatement("INSERT INTO jdbc (`name`) VALUES (?)")) { for (int i = 1; i <= 5; i++) { ps.setString(1, String.format( "Line %d: Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.", i)); ps.addBatch(); } ps.executeBatch(); } }

enviará declaraciones INSERT individuales aunque haya creado un Batch

INSERT INTO jdbc (`name`) VALUES (''Line 1: Lorem ipsum ...'') INSERT INTO jdbc (`name`) VALUES (''Line 2: Lorem ipsum ...'')

Sin embargo, si cambio la cadena de conexión para incluir rewriteBatchedStatements=true

String myConnectionString = "jdbc:mysql://localhost:3307/mydb?" + "useUnicode=true&characterEncoding=UTF-8" + "&rewriteBatchedStatements=true";

entonces JDBC enviará una o más instrucciones INSERT de varias filas

INSERT INTO jdbc (`name`) VALUES (''Line 1: Lorem ipsum ...''),(''Line 2: Lorem ipsum ...'')

¿JDBC conoce el valor asignado a max_allowed_packet y, por lo tanto, hace que el paquete sea más pequeño que el valor definido para max_allowed_packet ...?

Si. Si habilita el registro general de MySQL y lo verifica, verá que MySQL Connector / J inspecciona un montón de variables cuando se conecta, una de las cuales es max_allowed_packet . También puede establecer un valor pequeño de max_allowed_packet y verificar que JDBC divide un lote en varias instrucciones INSERT de varias filas si una sola declaración de este tipo para todo el lote excedería max_allowed_packet .