2013-06-24 51 views
1

是否存在差異以及使用哪種更好的做法:String.format()並手動插入值或PreparedStatement並將值解析爲佔位符(什麼是更多大小的代碼)?字符串格式(或類似函數)或PreparedStatement

+0

作爲一個方面說明,你正在尋求「更好的實踐」......但問「什麼是更多的代碼大小」。您應該認識到_quality_與_quantity_不一樣。 –

回答

4

作爲一般規則,千萬不要使用純文本字符串格式其中PreparedStatement可以使用。後者具有數據庫SQL語法的知識。並會照顧「屏蔽」每個特殊字符比你好得多。

不遵循該規則將導致代碼中SQL Injection的高風險。

Does the preparedStatement avoid SQL injection?

2

有一個根本的區別:PreparedStatement將不惜一切代價,這樣的價值觀,你喂到它(通過.set*()方法)來作爲「中性」到數據庫(或者說, 「JDBC引擎」)。

請注意,PreparedStatement接口。因此,當爲這個或那個數據庫引擎使用JDBC驅動程序時,根據所述引擎的不同,它將能夠採取不同的行爲。

請不要使用String.format()。它的角色非常不同! String.format()無法防止SQL注入攻擊; PreparedStatement可以,除非它的實現者真的做到了,確實是不好的工作。

相關問題