seh*_*ugg 3 mysql jdbc prepared-statement mysql-connector
据我所知,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();
Run Code Online (Sandbox Code Playgroud)
我在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'
...
Run Code Online (Sandbox Code Playgroud)
我也在协议日志中看到了每次都发送的查询(使用tcpdump).
使用Connector/J 5.1.12和MySQL 5.1.44.JDBC URL中没有有趣的JDBC选项.直接去驾驶员进行这项测试,没有游泳池.
为什么不准备这些陈述?
Connector/J驱动程序在本地处理预准备语句,除非您使用connection参数打开真实服务器端语句useServerPrepStmts=true
.
http://dev.mysql.com/doc/refman/5.0/en/connector-j-reference-configuration-properties.html
归档时间: |
|
查看次数: |
3827 次 |
最近记录: |