Est-il possible d'obtenir l'identité @@ à partir de l'insertion SQL sur un appel de modèle Spring jdbc? Si c'est le cas, comment?Identité de sql insert via jdbctemplate
Répondre
La méthode JDBCTemplate.update
est surchargée pour prendre un objet appelé GeneratedKeyHolder que vous pouvez utiliser pour récupérer la clé générée automatiquement. Par exemple (code tiré de here):
final String INSERT_SQL = "insert into my_test (name) values(?)";
final String name = "Rob";
KeyHolder keyHolder = new GeneratedKeyHolder();
jdbcTemplate.update(
new PreparedStatementCreator() {
public PreparedStatement createPreparedStatement(Connection connection) throws SQLException {
PreparedStatement ps =
connection.prepareStatement(INSERT_SQL, new String[] {"id"});
ps.setString(1, name);
return ps;
}
},
keyHolder);
// keyHolder.getKey() now contains the generated key
Que diriez-vous SimpleJdbcInsert.executeAndReturnKey?
Wow, je ne savais pas vraiment à propos de cette classe - un peu soigné. Merci. +1 – javamonkey79
J'aime cette version plus que la version avec PreparedStatementCreator. – ruslanys
Ajout de notes détaillées/exemple de code pour répondre à todd.pierzina
jdbcInsert = new SimpleJdbcInsert(jdbcTemplate);
jdbcInsert.withTableName("TABLE_NAME").usingGeneratedKeyColumns(
"Primary_key");
Map<String, Object> parameters = new HashMap<String, Object>();
parameters.put("Column_NAME1", bean.getval1());
parameters.put("Column_NAME2", bean.getval2());
// execute insert
Number key = jdbcInsert.executeAndReturnKey(new MapSqlParameterSource(
parameters));
// convert Number to Int using ((Number) key).intValue()
return ((Number) key).intValue();
Je suis confronté à cette exception: org.springframework.dao.InvalidDataAccessResourceUsageException: La fonction getGeneratedKeys n'est pas supportée par cette base de données –
@ Az.MaYo - Votre problème peut être lié à la version du pilote JDBC. –
- 1. identité SQL Server question
- 2. sql par mois identité
- 3. Comment obtenir une identité individuelle dans un insert XML?
- 4. Identité du magasin avant et après un insert?
- 5. LINQ to SQL Insert
- 6. SQL INSERT de SELECT
- 7. jdbctemplate, jpatemplate
- 8. Forcer INSERT uniquement via la procédure stockée
- 9. Identité de l'image "list-style-image" dans Opera via CSS
- 10. SQL: saveurs de INSERT INTO
- 11. problème SQL homologue identité du serveur
- 12. Insert déclencheur SQL
- 13. Insert SQL Server
- 14. SQL INSERT ou UPDATE
- 15. sql query - insert
- 16. SQL BULK INSERT d'erreurs
- 17. INSERT - PHP & SQL Server
- 18. Identité d'insertion multiple get
- 19. insertion de lot de printemps en utilisant hibernateTemplate, JdbcTemplate
- 20. Requêtes paginées avec JdbcTemplate
- 21. Spring JdbcTemplate ConnectionPooling Configuration
- 22. jdbctemplate et verrouillage optimiste
- 23. Java Spring JdbcTemplate
- 24. SpringFramework JdbcTemplate RowMapper
- 25. SQL: INSERT INTO ... VALUES..SELECT
- 26. INSERT rapide SQL sans UPDATE
- 27. SQL Server 2008 INSERT Optimisation
- 28. T-SQL hors service insert
- 29. La procédure stockée SQL INSERT ne fonctionne pas
- 30. Sql Server INSERT problème de portée
Ce serait le "one liner" que je cherche ici. Agréable. Triste chose est que j'ai vu le lien, mais je l'ai passé à côté de cela: "partie de la norme JDBC 3.0". (Je ne pense pas que nous utilisions JDBC 3.0, mais je ne pense pas non plus que cela soit pertinent). – javamonkey79
Il obtient un vrai one liner en Java 8 avec lambdas \ m/ – fabwu