項目組一孩子把我叫過去,說是通過Statement的getGeneratedKeys()獲取不到主鍵,並且一直拋500,看了下他寫的代碼發現兩個問題,他的代碼大概如下:
PreparedStatement pstmt = con.prepareStatement("INSERT INTO TAB(NAME) VALUES('name')"); ResultSet rs = pstmt.getGeneratedKeys(); if (rs.next()) { int primaryKey = rs.getInt(1); }
根據API描述,上述代碼缺少一個小步驟就是未指示是否應該返回自動生成的鍵的標志(Statement.RETURN_GENERATED_KEYS
或 Statement.NO_GENERATED_KEYS
),還有一個小錯誤就是PreparedStatement並未指定插入操作。小改一下就沒問題了。
PreparedStatement pstmt = con.prepareStatement("INSERT INTO TAB(NAME) VALUES('name')", Statement.RETURN_GENERATED_KEYS); pstmt.executeUpdate(); ResultSet rs = pstmt.getGeneratedKeys(); if (rs.next()) { int primaryKey = rs.getInt(1); }