据我所知,MySQL 5.1支持服务器端准备的语句。因此,下面的代码应该准备一次语句,并执行10次:
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();
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。JDBCURL中没有有趣的JDBC选项。直接去找司机做这个测试,没有游泳池。
为什么这些声明没有准备好?