¿Es posible obtener la identidad @@ desde la inserción de SQL en una llamada de plantilla Spring jdbc? ¿Si es así, cómo?identidad desde la inserción de sql a través de jdbctemplate
Respuesta
El método JDBCTemplate.update
está sobrecargado para tomar un objeto llamado GeneratedKeyHolder que puede usar para recuperar la clave autogenerada. Por ejemplo (tomado de código 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
¿Qué tal SimpleJdbcInsert.executeAndReturnKey?
Guau, realmente no sabía nada de esa clase, un poco ordenada. Gracias. +1 – javamonkey79
Me gusta más esta versión que la versión con PreparedStatementCreator. – ruslanys
Adición de notas detalladas/código de ejemplo para responder a 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();
Me enfrento a esta excepción: org.springframework.dao.InvalidDataAccessResourceUsageException: la función getGeneratedKeys no es compatible con esta base de datos –
@ Az.MaYo - Su problema podría estar relacionado con la versión del controlador JDBC. –
- 1. Insertar inserción de SQL @@ Identidad
- 2. La inserción de identidad en el servidor vinculado falla
- 3. inserción de identidad tsql sin lista de nombres de columna
- 4. Velocidad de inserción Sql
- 5. Obtener la identidad de la inserción múltiple en el servidor sql 2008
- 6. ¿Cómo generar una lista dinámica "in (...)" sql a través de Spring JdbcTemplate?
- 7. ¿SQL Server garantiza la inserción secuencial de una columna de identidad?
- 8. SQL tema de la identidad del servidor
- 9. Inserción múltiple múltiple de SQL
- 10. SQL - Inserción y actualización de múltiples registros a la vez
- 11. Inserción de una fila y la recuperación de la identidad de la nueva fila en SQL Server CE
- 12. Datos de inserción desde el servidor Sql a la aplicación de escritorio
- 13. Cómo agregar identidad a la columna en SQL Server?
- 14. Spring JdbcTemplate no puede obtener la Id. De inserción de MySQL
- 15. Ver el SQL subyacente en Spring JdbcTemplate?
- 16. SQL Server - restablecer el campo de identidad
- 17. iSeries DB2: ¿hay alguna manera de seleccionar el valor de identidad de una instrucción de inserción?
- 18. DBCC CHECKIDENT Establece identidad a 0
- 19. TSQL - Inserción para llevarlo a SQL dinámico
- 20. Obtener clave de identidad automática después de insertar a través de EF
- 21. Generar inserción sql en Oracle
- 22. Proceso de inserción muy lento utilizando Linq a Sql
- 23. ¿Inserción de lote usando Sql maravilloso?
- 24. ¿Cómo puedo emitir un solo comando desde la línea de comando a través de sql plus?
- 25. Uso de declaraciones preparadas con JDBCTemplate
- 26. Inserción/actualización masiva de servidor Sql frente a MERGE en el escenario de inserción o actualización
- 27. SQL Injection a través de mysql_query
- 28. columna de identidad en el servidor Sql
- 29. ¿Crear identidad de SQL como clave principal?
Ese sería el "un trazador de líneas" que estoy buscando aquí. Bonito. Lo triste es que vi el enlace pero pasé por alto debido a esto: "parte del estándar JDBC 3.0". (No creo que usemos JDBC 3.0, pero tampoco creo que esto sea relevante). – javamonkey79
Se obtiene un verdadero trazador de líneas en Java 8 con lambdas \ m/ – fabwu