代码之家  ›  专栏  ›  技术社区  ›  sehugg

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

  •  3
  • sehugg  · 技术社区  · 14 年前

    据我所知,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选项。直接去找司机做这个测试,没有游泳池。

    为什么这些声明没有准备好?

    1 回复  |  直到 14 年前
        1
  •  8
  •   Joshua Martell    14 年前

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

    http://dev.mysql.com/doc/refman/5.0/en/connector-j-reference-configuration-properties.html