1. 程式人生 > >撩課-JavaWeb之Statement介面與預編譯語句及呼叫儲存過程

撩課-JavaWeb之Statement介面與預編譯語句及呼叫儲存過程

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呼叫二個引數的儲存過程