使用MySQL Connector/J没有服务器端准备的语句

使用MySQL Connector/J没有服务器端准备的语句,mysql,jdbc,prepared-statement,mysql-connector,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(

据我所知,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();
我每次也在协议日志中看到完整发送的查询(使用tcpdump)

使用Connector/J 5.1.12和MySQL 5.1.44。JDBC URL中没有有趣的JDBC选项。直接去找司机做测试,没有游泳池


为什么没有准备语句?

连接器/J驱动程序在本地处理准备好的语句,除非您使用连接参数
useServerPrepsmts=true打开真正的服务器端语句


我不确定从那时起这是否得到了修复(我认为读取变更日志不是一个好时机),但服务器端准备的语句存在一系列问题,因此在Connector/J()中默认禁用了这些语句。
    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'
            ...