問題背景
項目中多處使用原生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
均可正常返回。