原文地址 : https://yq.aliyun.com/articles/603142
for(int i=0;i<2;i++){
String sql="SELECT * FROM t_order WHERE user_id=?";
try{
Connection connection=dataSource.getConnetion();
PreparedStatement preparedStatement = connection.prepareStatement(sql);
preparedStatement.setInt(1,10);
ResultSet resultSet = preparedStatement.executeQuery();
while(resultSet.next()){
...
}
}
}
jdbc_useServerPrepStmts
jdbc:mysql://127.0.0.1:3306/demo_ds?useServerPrepStmts=true 如果加上了这个useServerPrepStmts后正常的交互为
即预执行 sql id=? 然后预执行成功即 Response(prepare ok) ---> 然后真正执行语句ExecuteStatement(parameter=10)
如果不加这个useServerPreStmts参数的话就没有Prepare这个步骤
cachePrepStmts=true
如果不加这个cachePrepStmts=true参数的话 上面是每个SQL都要执行Prepare ,而我们只想要第一次执行Prepare 而从第二次不执行 就要加上这个参数cachePrepStmts=true
jdbc:mysql://127.0.0.1:3306/demo_ds?useServerPrepStmts=true&cachePrepStmts=true