Statement.RETURN_GENERATED_KEYS獲取主鍵id踩坑記錄

問題背景

項目中多處使用原生JDBC進行數據插入,進行數據insert時會預先生成一個id主鍵再進行插入,並通過Statement.RETURN_GENERATED_KEYS的方式返回主鍵id,都能獲取正確結果。偶然一次使用該方式對返回值進行處理時,獲取到的返回值是受影響的rows,故進行排查。

相關代碼
PreparedStatement pstmt = conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);

執行結果

問題原因

經過排查,發現能夠成功獲取主鍵id的代碼中,對應的表結構主鍵是自增的,設有AUTO_INCREMENT屬性,而不能返回主鍵id的代碼,相應表結構並沒有自增屬性。

源碼中說明

源碼

總結

在使用Statement.RETURN_GENERATED_KEYS時,需要特別注意,被操作的數據表主鍵id必須設置AUTO_INCREMENT屬性。數據庫自增的id和手動插入的id均可正常返回。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章