¿Cómo aprovecho la capacidad de MySQL para almacenar en caché las declaraciones preparadas? Una razón para usar declaraciones preparadas es que no es necesario enviar la declaración preparada muchas veces si la misma declaración preparada se va a usar nuevamente.¿Cómo usar el almacenamiento en caché de sentencias preparadas de MySQL?
Class.forName("com.mysql.jdbc.Driver");
Connection conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/mydb" +
"?cachePrepStmts=true", "user", "pass");
for (int i = 0; i < 5; i++) {
PreparedStatement ps = conn.prepareStatement("select * from MYTABLE where id=?");
ps.setInt(1, 1);
ps.execute();
}
conn.close()
Al ejecutar el ejemplo anterior de Java veo 5 pares de preparar y ejecutar comandos en el archivo de registro mysqld. Al mover la asignación ps fuera del bucle, se obtienen, por supuesto, los comandos Preparar y 5 Ejecutar. El parámetro de conexión "cachePrepStmts = true" no parece hacer ninguna diferencia aquí.
Al ejecutar un programa similar utilizando Spring e Hibernate, el número de comandos de preparación enviados (1 o 5) depende de si el parámetro de conexión cachePrepStmts está habilitado. ¿Cómo ejecuta Hibernate las declaraciones preparadas para aprovechar la configuración de cachePrepStmts? ¿Es posible imitar esto usando JDBC puro?
yo estaba corriendo en este servidor MySQL 4.1.22 y MySQL-conector-java-5.0.4.jar