项目组一孩子把我叫过去,说是通过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); }