3
据我所知,MySQL 5.1支持服务器端准备语句。因此,下面的代码应该准备语句一次,并且执行10次:没有服务器端准备好的语句使用MySQL连接器/ J
Connection conn = ds.getConnection();
PreparedStatement stmt = conn.prepareStatement("SELECT COUNT(*) FROM users WHERE user_id=?");
for (int i=0; i<10; i++)
{
stmt.setString(1, "FOO"+i);
ResultSet res = stmt.executeQuery();
res.close();
}
stmt.close();
conn.close();
我看,而不是在mysqld的日志什么是查询中直接执行:
SELECT @@session.tx_isolation
SELECT USER()
SELECT COUNT(*) FROM users WHERE user_id='FOO0'
SELECT COUNT(*) FROM users WHERE user_id='FOO1'
SELECT COUNT(*) FROM users WHERE user_id='FOO2'
...
我看到发送的查询在协议日志中每次都充满(使用tcpdump)。
使用Connector/J 5.1.12和MySQL 5.1.44。 JDBC URL中没有有趣的JDBC选项。直接去这个测试的驱动程序,没有游泳池。
为什么不准备报表?
我不知道这是否已经从那以后固定的(阅读更新日志是不是我的好时机想法),但也有与服务器端预处理语句一堆的问题,所以他们在Connector/J中是默认禁用的(http://dev.mysql.com/doc/relnotes/connector-j/en/news-5-0-5.html)。 – 2014-02-13 17:04:45