2011-12-03 80 views

回答

6

聲明VS PreparedStatement的

  1. 性能可與PreparedStatement的更好,但取決於數據庫。

  2. 使用PreparedStatement可以避免SQL注入。 How does a PreparedStatement avoid or prevent SQL injection?

  3. 更好的類型通過setInt檢查prepareStatement,setString其中as語句只是附加到主SQL。

類似的帖子:

Difference between Statement and PreparedStatement

的CallableStatement - Java的答案,所有數據庫的訪問StoredProcedures。

類似的帖子

CallableStatement vs Statement

隨着PreparedStatement和贖回你已經有緩存,緩存也就是在它自己的一個很大的話題,你不喜歡做的所有這一切,而不是看ehcache

您幾乎總是更喜歡PreparedStatement over Statement

如果您必須對StoredProcedure進行操作,那麼您只有一個選項CallableStatement。

+0

「With PreparedStatement and Callable你已經有緩存」。是這樣嗎?據我所知,緩存只適用於SQL執行計劃。這些結構不會緩存查詢結果。 – melihcelik

3

我會推薦幾乎任何時候使用PreparedStatement傳遞參數,無論你是否會重新使用該語句。在實踐中,我使用PreparedStatement來處理除了過程調用之外的所有內容,並讓DB和JDBC驅動程序決定緩存什麼以及如何緩存。過程調用應該使用CallableStatement來處理缺少一致的跨數據庫過程調用語法。

在PostgreSQL上,JDBC驅動程序在客戶端緩存準備語句,直到達到某個重用閾值。此時發佈服務器端PREPARE,將來的執行將使用服務器端準備好的語句及其緩存計劃。由於PostgreSQL的基於統計的查詢規劃器,這可能會有一些......有趣......和意想不到的效果。如果您的表具有特定的值分佈(或者由於缺少ANALYZE,random_page_cost或過低的統計閾值而導致統計數據不正確),那麼規劃人員可能會選擇一個不同且較慢的查詢計劃它知道你正在尋找的實際價值。如果您在第5次(默認情況下)重複某個特定語句後突​​然大幅減慢查詢速度,則可能會因此而被咬傷,並且可以在PgJDBC中通過turning off server-side PREPARE解決該問題。目前正在進行的工作是通過檢查某個特定參數與未知值的情況具有非常不同的狀態來檢測服務器中的這些問題情況,但AFAIK它尚未達到HEAD。另見this question。搜索pgsql-general郵件列表和stackoverflow以獲取更多信息。

相關問題