准备好的语句如何跳过转义字符?
How does prepared statement skip the escape characters?
我有这样的查询
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 查询,我会收到错误消息,因为查询格式不正确。
但是当我 运行 准备好的语句时,我没有得到错误。这是为什么?
prepared statement运行是什么查询,如果上面的查询报错?我看到一个空的结果集,这意味着查询没有失败。准备好的语句是否会自行更改查询?
当您使用准备好的语句时,参数值在 解析后才会与查询合并。所以参数值中的任何特殊字符都不可能破坏查询的语法。
我有这样的查询
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 查询,我会收到错误消息,因为查询格式不正确。 但是当我 运行 准备好的语句时,我没有得到错误。这是为什么?
prepared statement运行是什么查询,如果上面的查询报错?我看到一个空的结果集,这意味着查询没有失败。准备好的语句是否会自行更改查询?
当您使用准备好的语句时,参数值在 解析后才会与查询合并。所以参数值中的任何特殊字符都不可能破坏查询的语法。