撩課-JavaWeb之Statement介面與預編譯語句及呼叫儲存過程
阿新 • • 發佈:2018-12-23
Statement介面
介面
Statement介面作用
用於進行Java程式和資料庫之間的資料傳輸
具體類有3個實現
Statement
用於對資料庫進行通用訪問,使用的是靜態sql
PreparedStatement
PreparedStatement 用於預編譯模板SQL語句,在執行時接受sql輸入引數
CallableStatement
要訪問資料庫儲存過程時使用
也可以接受執行時輸入引數。
預編譯語句
沒有預編譯語句時
沒有預編譯語句,所有的sql都是進行拼接
預編譯語句
PreparedStatement 用於預編譯模板SQL語句 在效能和程式碼靈活性上有顯著地提高 PreparedStatement 物件使用 ? 作為佔位符,即引數標記; 使用 setXXX( index,value) 方法將值繫結到引數中 每個引數標記是其順序位置引用,注意 index 從 1 開始;
PreparedStatement 物件執行SQL語句
executeQuery()
executeUpdate()
注意,它們都沒有引數
內部優化
示例圖
支援優化情況
MySql不支援
Oracle支援
更安全
可以防SQL注入
什麼是sql注入
就是通過把SQL命令插入到Web表單提交或輸入域名或頁面請求的查詢字串,最終達到欺騙伺服器執行惡意的SQL命令
使用者登入
為什麼PrepareState就能夠防注入
之所以PreparedStatement能防止注入, 是因為它把單引號轉義了,變成了\', 這樣一來,就無法截斷SQL語句,進而無法拼接SQL語句 基本上沒有辦法注入了。
呼叫儲存過程
1.在資料庫當中定義一個儲存過程
2.JDBC呼叫一個引數的儲存過程
3.編寫輸入引數和輸出引數的儲存過程
4.JDBC呼叫二個引數的儲存過程