我想要从插入的行中检索自动生成的ID,但我得到了一个NullPointerException
。
这是代码:
long result = 0;
final String SQL = "INSERT INTO compte (prenom, nom, datenaissance, numtelephone) "
+ " VALUES(?,?,?,?)";
KeyHolder keyHolder = new GeneratedKeyHolder();
int row= this.jdbcTemplate.update(new PreparedStatementCreator(){
public PreparedStatement createPreparedStatement(Connection connection)
throws SQLException {
PreparedStatement ps =connection.prepareStatement(SQL);
ps.setString(1, a.getSurname());
ps.setString(2, a.getName());
ps.setDate(3, a.getDob());
ps.setString(4, a.getPhone());
return ps;
}
},keyHolder);
if (row > 0)
result = keyHolder.getKey().longValue(); //line 72
这是 PostgreSQL 的表:
CREATE TABLE compte
(
idcompte serial NOT NULL,
prenom character varying(25) NOT NULL,
nom character varying(25) NOT NULL,
datenaissance date NOT NULL,
numtelephone character varying(15) NOT NULL,
CONSTRAINT pk_compte PRIMARY KEY (idcompte )
);
PostgreSQL支持自动生成的键,但我遇到了这个异常:
java.lang.NullPointerException
at com.tante.db.JDBCUserAccountDAO.insertAccount(JDBCUserAccountDAO.java:72)
编辑: 我尝试了以下代码以获取自动生成的键:
result = jdbcTemplate.queryForLong("select currval('compte_idcompte_seq')");
但是我收到了一个 PSQLException
错误:
compte_idcompte_seq
序列的当前值(currval)在此会话中未定义,尽管我认为在插入行时应该调用 compte_idcompte_seq.NEXTVAL
编辑:
当插入行时,自动递增值会被正确创建
有任何想法吗?
keyHolder.getKey().longValue()
。 - Jerec TheSithkeyHolder.getKeys().get("idcompte")
也是 null,那么有没有办法检索自动生成的键? - Jerec TheSith