我注意到,当我使用PreparedStatement
时,它看起来似乎不会转义某些通配符,如'%'或'_'。我知道这些可以使用反斜杠在MySql中转义。这让我想知道,PreparedStatement
会逃离哪些角色?什么字符将PreparedStatement转义?
5
A
回答
6
PreparedStatement
不会转义任何东西 - 它依赖于预编译语句的数据库支持。
也就是说,PreparedStatement
决不会用?
s代替参数值,以形成一个文字查询字符串。相反,它使用占位符将查询字符串发送到数据库,并使用数据库支持来绑定查询参数(但可能取决于JDBC驱动程序实现)。
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();
+0
这可能是特定于您的驱动程序/分贝。正如axtavt提到的,大多数不会自动逃避输入。 – Leigh 2012-04-09 02:29:48
相关问题
- 1. 转义字符 - 什么对
- 2. 什么转义字符\ u000a
- 3. 什么字符需要转义JSON.parse
- 4. 为什么repr()添加转义字符?
- 5. stringByAddingPercentEscapesUsingEncoding转义的字符是什么?
- 6. Ruby中的转义字符是什么?
- 7. 将unicode转义字符转义为普通字符串(没有转义字符)
- 8. 为什么要将转义字符添加到URL参数中?
- 9. PreparedStatement是否将空字符串转换为null?
- 10. 为什么Alamofire 4.4.0将JSON字符串转义为JSON字符串(Swift 3)?
- 11. 将字符串插入到PreparedStatement
- 12. javascript为什么双转义字符/字符
- 13. 什么字符应该在sql字符串参数中转义
- 14. JQuery.each将字符串文字转换为字符串。为什么?
- 15. 什么是转换字符?
- 16. 为什么PreparedStatement优于Statement
- 17. 将JS反斜杠转义字符转换为不转义字符Shift JIS
- 18. 什么是字符文字中转义数字的Java语义,例如'\ 15'?
- 19. 转义字符
- 20. 转义字符
- 21. 转义字符,
- 22. 转义字符
- 23. 转义字符
- 24. 转义字符
- 25. 为什么f.label转换'ALL'将字符串转换为'All'大写字符
- 26. 为什么我的字典为字符串添加额外的转义字符?
- 27. 字符串转义字符
- 28. 将ASCII字符转换为十六进制转义字符串
- 29. 如何将印度语字符转换为Unicode转义字符
- 30. SSIS将转义字符转换为asc(不可打印字符)
有趣的是,MySql的支持是什么样的? – stevebot 2010-10-14 15:46:35
MySql支持在服务器端以相同方式准备语句。它在代码中的外观取决于您使用的驱动程序。 – 2010-10-14 15:49:03
我相信很多驱动程序实际上会在SQL文本中插入转义参数文本。 – 2010-10-14 15:54:35