JDBC之預編譯事務批處理存圖片
- 2019 年 10 月 7 日
- 筆記

Statement接口作用
用於進行Java程序和數據庫之間的數據傳輸
具體類有3個實現
Statement
用於對數據庫進行通用訪問,使用的是靜態sql
PreparedStatement
PreparedStatement 用於預編譯模板SQL語句,在運行時接受sql輸入參數
CallableStatement
要訪問數據庫存儲過程時使用
也可以接受運行時輸入參數。
預編譯語句
PreparedStatement 用於預編譯模板SQL語句
在性能和代碼靈活性上有顯着地提高
PreparedStatement 對象使用 ? 作為佔位符,即參數標記;
使用 setXXX( index,value) 方法將值綁定到參數中
每個參數標記是其順序位置引用,注意 index 從 1 開始;
PreparedStatement 對象執行SQL語句
executeQuery()

executeUpdate()

什麼是sql注入
就是通過把SQL命令插入到Web表單提交或輸入域名或頁面請求的查詢字符串,最終達到欺騙服務器執行惡意的SQL命令

使用預編譯語句的好處就是可以防止SQL注入
為什麼PrepareState就能夠防注入
之所以PreparedStatement能防止注入,
是因為它把單引號轉義了,變成了',
這樣一來,就無法截斷SQL語句,進而無法拼接SQL語句 基本上沒有辦法注入了。
處理事務
默認情況下, 事務是自動提交的,要設置為手動提交
處理事務過程
關閉自動提交
conn.setAutoCommit(false);
沒有問題時,提交事務
conn.commit();
出現異常時,進行回滾操作
conn.rollback()
回滾之後,事務結束。釋放資源
出現異常,沒有提交,也不會更新數據庫,但是會佔用資源
所以要出現異常時,進行回滾操作
只有增、冊、改才需要事務,查詢不需要事務
以後發現自己寫的代碼是正確的,測試也成功,但是數據庫當中的數據不變,肯定是事務沒有提交
InnoDB才支持外鍵和事務。MyISAM不支持外鍵和事務
轉賬示例:

這裡順便把批處理也給提一下
需要添加參數


老九學堂會員社群出品
作者:柳成萌
Statement.RETURN_GENERATED_KEYS
通過語句對象的getGeneratedKeys獲取主鍵

老九學堂會員社群出品
作者:柳成萌