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獲取主鍵

老九學堂會員社群出品

作者:柳成萌