Getting auto-generated key from row insertion in spring 3 / PostgreSQL 8.4.9

后端 未结 9 1269
北荒
北荒 2020-12-04 17:40

I would like to retrieve the auto-generated id from a row insertion, but I get a NullPointerException

Here is the code :

long result = 0         


        
9条回答
  •  不思量自难忘°
    2020-12-04 18:11

    A solution using NamedParameterJdbcTemplate with Sequence.nextval :

            MapSqlParameterSource parameters = new MapSqlParameterSource();
            parameters.addValue("prenom", prenom);
            parameters.addValue("nom", nom);
            parameters.addValue("datenaissance", datenaissance);
            parameters.addValue("numtelephone", numtelephone);
    
        final String SQL = "INSERT INTO compte (idcompte,  prenom, nom, datenaissance, numtelephone) "
                            + " VALUES(compte_idcompte_seq.NEXTVAL, :prenom, :nom, :datenaissance, :numtelephone)";
    
            KeyHolder keyHolder = new GeneratedKeyHolder();
            NamedParameterJdbcTemplate namedJdbcTemplate = new NamedParameterJdbcTemplate(txManager.getDataSource());
            int nb = namedJdbcTemplate.update(SQL, parameters, keyHolder, new String[]{"idcompte"});
            Long generatedId = keyHolder.getKey().longValue();
    

    I like this solution because with NamedParameterJdbcTemplate because the parameters are passed by name and the code is more readable and less prone to errors, especially when there are big queries.

提交回复
热议问题