vorrei recuperare l'id generato automaticamente da un inserimento di fila, ma ottengo un NullPointerException
Ottenere generata automaticamente chiave dall'inserzione fila in primavera 3/PostgreSQL 8.4.9
Ecco il codice:
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
E questa è la tabella di 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 supporta le chiavi generate automaticamente, ma ottengo questa eccezione:
java.lang.NullPointerException
at com.tante.db.JDBCUserAccountDAO.insertAccount(JDBCUserAccountDAO.java:72)
EDIT: ho provato questo per ottenere l'auto generato chiave:
result = jdbcTemplate.queryForLong("select currval('compte_idcompte_seq')");
ma ottengo un PSQLException
:
the current value (currval) of the sequence compte_idcompte_seq is not defined in this session
, anche se ho pensato che compte_idcompte_seq.NEXTVAL
avrebbe dovuto essere chiamato durante l'inserimento la riga
MODIFICA:
Il valore di incremento automatico viene creato correttamente quando si inserisce una riga
Qualche idea?
sono curioso di sapere il numero di riga JDBCUserAccountDAO.java:72 – Kshitij
Quale riga è la riga 72? Quale puntatore è nullo? –
scusate, la riga 72 si riferisce a 'keyHolder.getKey(). LongValue()' –