我有一个这样的查询
val ps = con.prepareStatement(s"SELECT * from employee where name LIKE ?")
ps.setString(1, "%" + searchTerm + "%")
val rs = ps.executeQuery()
,当我打印预处理语句时,我得到
:HikariProxyPreparedStatement@710925960 wrapping com.mysql.cj.jdbc.ClientPreparedStatement: SELECT * from employee where name LIKE '%abc''%'
如果我在mysql编辑器中运行SELECT查询,我得到错误,因为查询是畸形的。但是当我运行准备好的语句时,我没有得到错误。为什么?
如果上面的查询出错,准备好的语句运行什么查询?我看到一个空的结果集,这意味着查询没有失败。准备好的语句是否自行更改查询?
使用预处理语句时,在被解析后,参数的值才会与查询合并。因此,参数值中的任何特殊字符都不可能打乱查询的语法。