为什么java中的preparedStatement不发送PREPARE和EXECUTE命令?
执行以下代码时 公共静态连接连接连接引发异常{ 系统输出打印准备; PreparedStatement stmt=conn.prepareStatementSELECT*从客户中选择较低的客户名称,如:?; stmt.setString1,%+'J'+%; 结果集rset=stmt.executeQuery; showResultSet; stmt.setString1,%+'E'+%; rset=stmt.executeQuery; showResultSet; } MySQL中的一般日志是这样的为什么java中的preparedStatement不发送PREPARE和EXECUTE命令?,java,mysql,Java,Mysql,执行以下代码时 公共静态连接连接连接引发异常{ 系统输出打印准备; PreparedStatement stmt=conn.prepareStatementSELECT*从客户中选择较低的客户名称,如:?; stmt.setString1,%+'J'+%; 结果集rset=stmt.executeQuery; showResultSet; stmt.setString1,%+'E'+%; rset=stmt.executeQuery; showResultSet; } MySQL中的一般日志是这
2020-07-17T07:24:21.289065Z 107 Query SELECT * FROM customers WHERE lower(customer_name) LIKE '%J%'
2020-07-17T07:24:21.315094Z 107 Query SELECT * FROM customers WHERE lower(customer_name) LIKE '%E%'
但正如我所知,当使用preparedStatement时,日志应该是这样形成的
将“PREPARE”语句发送到DBMS,然后执行“EXECUTE”语句
2020-07-17T06:03:55.083909Z 96 Prepare SELECT * FROM customers WHERE lower(customer_name) LIKE ?
2020-07-17T06:03:55.084115Z 96 Execute SELECT * FROM customers WHERE lower(customer_name) LIKE '%J%'
2020-07-17T06:03:55.083909Z 96 Prepare SELECT * FROM customers WHERE lower(customer_name) LIKE ?
2020-07-17T06:03:55.084115Z 96 Execute SELECT * FROM customers WHERE lower(customer_name) LIKE '%J%'
这个问题与其他问题重复 有两种类型的预处理语句缓存 客户端准备的语句缓存。 服务器端准备的语句缓存。 我的例子只是第一个,这意味着preparedStatement对象缓存在客户端,当语句字符串相同时,可以重用它 如果要使用第二个,则UseServerPrepsmts jdbc属性应设置为true 那么一般日志可能是这样的