Ist es möglich, die Identität @@ aus der SQL-Einfügung auf einem Spring jdbc-Vorlagenaufruf zu erhalten? Wenn das so ist, wie?Identität von SQL einfügen über JDBCtemplate
Antwort
Die Methode JDBCTemplate.update
ist überladen, um ein Objekt namens GeneratedKeyHolder zu übernehmen, mit dem Sie den automatisch generierten Schlüssel abrufen können. Zum Beispiel (Code aus here genommen):
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
Wie wäre es SimpleJdbcInsert.executeAndReturnKey?
Wow, ich wusste nicht wirklich über diese Klasse - irgendwie ordentlich. Vielen Dank. +1 – javamonkey79
Ich mag diese Version mehr als Version mit PreparedStatementCreator. – ruslanys
Hinzufügen detaillierte Notizen/Beispielcode todd.pierzina beantworten
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();
Ich stehe vor dieser Ausnahme: org.springframework.dao.InvalidDataAccessResourceUsageException: Die Funktion getGeneratedKeys wird von dieser Datenbank nicht unterstützt –
@ Az.MaYo - Ihr Problem könnte mit der JDBC-Treiberversion zusammenhängen. –
- 1. SQL Server: Identität einfügen
- 2. tsql Identität einfügen ohne Spalte Namensliste
- 3. über SQL-in Datum einfügen
- 4. T-Sql @@ Identität
- 5. SQL Server Identität
- 6. SQL Server Identität Problem
- 7. Identität vor und nach einem Einfügen speichern?
- 8. SQL Server: Identität bei jeder Löschaktion zurücksetzen
- 9. Map Identität Funktors über Rekord
- 10. SQL Identität (1,1) ab 0
- 11. SQL Server CE 3.5 Identität Einsatz
- 12. SQL Identität mit führenden Nullen aufgefüllten
- 13. ein BLOB über ein SQL-Skript einfügen?
- 14. Wie kann ich die Identität manuell einfügen?
- 15. SQL: Keine Abhilfe Identität Funktion verwenden Trigger
- 16. Fügen Sie das Apostroph mithilfe von jdbctemplate
- 17. Get Identität von mehreren Einfügung in SQL Server 2008
- 18. mit Spring JdbcTemplate - Injizieren Datenquelle vs jdbcTemplate
- 19. SQL-Identität als Primärschlüssel erstellen?
- 20. Wie kann ich die autoincrement-ID, wenn ich einen Datensatz in einer Tabelle über jdbctemplate einfügen
- 21. jdbctemplate, jpatemplate
- 22. JdbcTemplate mehrere Ergebnissätze
- 23. Frühling JDBCTemplate Ausnahme
- 24. Bulk Einfügen mehrerer Datensätze und Identität für alle mit ADO.NET
- 25. Das zugrunde liegende SQL in der Spring JdbcTemplate sehen?
- 26. Spring jdbcTemplate vs PreparedStatement. Leistungsunterschied
- 27. Einfügen von Daten über HABTM
- 28. Paged Abfragen mit JdbcTemplate
- 29. SQL DATETIME Einfügen von Excel?
- 30. Identität automatisches Springen in SQL Server LocalDb
Das wäre der "One Liner", den ich hier suche. Nett. Traurig ist, dass ich den Link gesehen habe, aber deswegen vorbeigeschaut habe: "Teil des JDBC 3.0-Standards". (Ich glaube nicht, dass wir JDBC 3.0 verwenden, aber ich denke auch nicht, dass das relevant ist). – javamonkey79
Es bekommt einen echten Liner in Java 8 mit Lambdas \ m/ – fabwu