我注意到,當我使用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