大家好,這裡是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的執行過程,大致是這樣的:
- SQL請求首先被髮送到連接管理器,這裡會涉及到權限驗證;
- 查詢緩存,如果命中 則直接返回結果
- 語法分析器,生成一個解析樹
- 優化器,生成一個執行計劃
- 根據執行計劃來執行SQL操作
使用prepareStatement方式會有兩個好處:
- 會提前生成執行計劃,可以避免上述步驟1~4的重複操作,這樣可以提高效率;
- 安全性好,可以防止SQL注入;這種方式會為用戶參數留下佔位符,執行計劃是提前生成的,所以不會因為參數而改變執行計劃;而直接提交SQL,執行計劃會受到用戶參數的影響,會有SQL注入風險。
感謝瀏覽閱讀,如果覺得內容有價值歡迎點贊,轉發;喜歡請關注“IT技術百貨”