Java中Statement與PreparedStatement與CallableStatement之間的區別 - javarevisited

banq發表於2021-05-26

這三個類的目的是執行不同型別的SQL查詢,但是它們之間還有一些細微的差別。現在讓我們來看一下它們:
  • 1. SQL查詢的型別:

這三個類中每一個的根本區別和獨特之處之一是Statements用於執行標準SQL查詢,PreparedStatement用於執行繫結或動態查詢,CallableStatement用於從Java呼叫儲存過程。
  • 2. SQL查詢的頻率:

Statement,PreparedSatement和CallableStatement之間的另一個關鍵區別在於,當一個特定的SQL查詢可能僅執行一次時,首選使用首選,而當特定的SQL查詢要多次執行但首選使用PreparedStatement時,則首選使用PreparedStatement。具有不同的值,例如 SELECT * From Users其中UserId =?。另一方面,當要執行儲存過程時,首選CallableStatement。
  • 3. SQL隱碼攻擊

PreparedStatement,Statement和CallableStatement之間的另一個重要區別是PreparedStatement阻止Java Web應用程式進行SQL隱碼攻擊。這也是在Java Web應用程式中使用PreparedStatement的常見原因之一。 在語句上使用PreparedStatement以獲得更好的效能和防止SQL隱碼攻擊也是一種 JDBC最佳實踐。 
  • 4.效能

這可能是Java中Statement,PreparedStatement和CallableStatement之間最本質的區別。與PreparedStatement的效能相比,Statement的效能非常低,因為已編譯查詢,並且計劃在資料庫端進行了快取。與Statement相比,CalalbleStatement的效能很高。 
  • 5.用法

Statement主要用於執行CREATE,ALTER和DROP之類的DDL語句,儘管您也可以執行一次性SELECT語句。與此相比,PreparedStatemetn用於應該多次執行但使用不同引數的SQL查詢。CalalbleStatement用於呼叫儲存過程和函式。

相關文章