小知識點:為什麼數據庫操作儘量選擇prepareStatement

大家好,這裡是IT技術百貨,專注於有價值的IT技術知識分享;

今天跟大家分享Java類加載的相關內容

問題描述

以java語言為例來講,在訪問數據庫的時候有兩種提交SQL的方式,一種是通過statement直接提交SQL,另一種是先通過prepareStatement預編譯SQL,然後設置可變參數再提交;

具體寫法如下:

<code>statement.executeUpdate("

UPDATE

Users

SET

stateus =

2

WHERE

userID=

233

");

/<code>
<code>PreparedStatement updateUser = con.prepareStatement("

UPDATE

Users

SET

stateus = ?

WHERE

userID = ?

"); updateUser.setInt(1, 2); updateUser.setInt(2,233); updateUser.executeUpdate();

/<code>

通常來講更建議使用第二種方式,很多ORM框架也都是通過第二種方式來實現的;那麼這是為什麼呢?

解答

首先要明白一條SQL的執行過程,大致是這樣的:

  1. SQL請求首先被髮送到連接管理器,這裡會涉及到權限驗證;
  2. 查詢緩存,如果命中 則直接返回結果
  3. 語法分析器,生成一個解析樹
  4. 優化器,生成一個執行計劃
  5. 根據執行計劃來執行SQL操作

使用prepareStatement方式會有兩個好處:

  1. 會提前生成執行計劃,可以避免上述步驟1~4的重複操作,這樣可以提高效率;
  2. 安全性好,可以防止SQL注入;這種方式會為用戶參數留下佔位符,執行計劃是提前生成的,所以不會因為參數而改變執行計劃;而直接提交SQL,執行計劃會受到用戶參數的影響,會有SQL注入風險。

感謝瀏覽閱讀,如果覺得內容有價值歡迎點贊,轉發;喜歡請關注“IT技術百貨”


分享到:


相關文章: