如何利用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