如何利用MySQL缓存预准备语句的能力? 使用预处理语句的一个原因是,如果再次使用相同的预处理语句,则不需要多次发送预处理语句本身。如何使用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()
运行上述Java示例时,我在mysqld日志文件中看到5对Prepare和Execute命令。将ps赋值移到循环外面当然会产生一个Prepare和5 Execute命令。连接参数“cachePrepStmts = true”在这里似乎没有任何区别。
当使用Spring和Hibernate运行类似的程序时,发送的Prepare命令的数量(1或5)取决于是否启用了cachePrepStmts连接参数。 Hibernate如何执行预处理语句以利用cachePrepStmts设置?有没有可能使用纯JDBC来模仿这个?
我MySQL服务器4.1.22和MySQL连接器的Java-5.0.4.jar