PreparedStatement会逃脱哪些角色?

时间:2010-10-14 15:38:29

标签: java jdbc

我注意到当我使用PreparedStatement时,它似乎无法逃脱某些外卡字符,例如'%'或'_'。我知道这些可以使用反斜杠在MySql中进行转义。这让我想知道PreparedStatement会逃脱什么角色?

2 个答案:

答案 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();