我注意到当我使用PreparedStatement
时,它似乎无法逃脱某些外卡字符,例如'%'或'_'。我知道这些可以使用反斜杠在MySql中进行转义。这让我想知道PreparedStatement
会逃脱什么角色?
答案 0 :(得分:6)
PreparedStatement
不会逃避任何事情 - 它依赖于预编译语句的数据库支持。
也就是说,PreparedStatement
永远不会将?
替换为参数值,以形成文字查询字符串。相反,它将带有占位符的查询字符串发送到数据库,并使用数据库支持来绑定查询参数(但是,它可能依赖于JDBC驱动程序实现)。
答案 1 :(得分:0)
在我的测试中,它会转义单引号,\r
,\t
,\n
等等。它非常好用:
String sql = "INSERT INTO test(title) VALUES(?)";
PreparedStatement stmt = con.prepareStatement(sql);
String title = "I'm a \"student\" in a \t (university) \r\n";
stmt.setString(1, title);
stmt.executeUpdate();