为什么java中的preparedStatement不发送PREPARE和EXECUTE命令?

为什么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中的一般日志是这

执行以下代码时

公共静态连接连接连接引发异常{ 系统输出打印准备; 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

那么一般日志可能是这样的