En Spring, ¿cómo puedo insertar datos en la tabla usando JdbcTemplate? ¿Alguien puede darme una muestra de código para hacer esto?Cómo ejecutar una instrucción INSERT utilizando la clase JdbcTemplate desde Spring Framework
Respuesta
Necesitará una fuente de datos para trabajar con JdbcTemplate.
JdbcTemplate template = new JdbcTemplate(yourDataSource);
template.update(new PreparedStatementCreator() {
public PreparedStatement createPreparedStatement(Connection connection) throws SQLException {
PreparedStatement statement = connection.prepareStatement(ourInsertQuery);
//statement.setLong(1, beginning); set parameters you need in your insert
return statement;
}
});
Uso jdbcTemplate.update(String sql, Object... args)
método:
jdbcTemplate.update(
"INSERT INTO schema.tableName (column1, column2) VALUES (?, ?)",
var1, var2
);
o jdbcTemplate.update(String sql, Object[] args, int[] argTypes)
, si es necesario mapear argumentos a tipos SQL de forma manual:
jdbcTemplate.update(
"INSERT INTO schema.tableName (column1, column2) VALUES (?, ?)",
new Object[]{var1, var2}, new Object[]{Types.TYPE_OF_VAR1, Types.TYPE_OF_VAR2}
);
Si usted está planeando utilizar JdbcTemplate en múltiples ubicaciones, sería una buena idea crear un Spring Bean para ello.
Uso de Java configuración sería:
@Configuration
public class DBConfig {
@Bean
public DataSource dataSource() {
//create a data source
}
@Bean
public JdbcTemplate jdbcTemplate() {
return new JdbcTemplate(dataSource());
}
@Bean
public TransactionManager transactionManager() {
return new DataSourceTransactionManager(dataSource());
}
}
A continuación, un repositorio que utiliza ese JdbcTemplate podría ser:
@Repository
public class JdbcSomeRepository implements SomeRepository {
private final JdbcTemplate jdbcTemplate ;
@Autowired
public JdbcSomeRepository(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}
@Override
@Transactional
public int someUpdate(SomeType someValue, SomeOtherType someOtherValue) {
return jdbcTemplate.update("INSERT INTO SomeTable(column1, column2) VALUES(?,?)", someValue, someOtherValue)
}
}
El método de actualización de JdbcTemplate que he utilizado se puede encontrar here.
Si usa spring-boot, no necesita crear una clase DataSource, simplemente especifique los datos url/username/password/driver en application.properties
, entonces simplemente puede @Autowired
.
@Repository
public class JdbcRepository {
private final JdbcTemplate jdbcTemplate;
@Autowired
public DynamicRepository(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}
public void insert() {
jdbcTemplate.update("INSERT INTO BOOK (name, description) VALUES ('book name', 'book description')");
}
}
Ejemplo de application.properties
:
#Basic Spring Boot Config for Oracle
spring.datasource.url=jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=YourHostIP)(PORT=YourPort))(CONNECT_DATA=(SERVER=dedicated)(SERVICE_NAME=YourServiceName)))
spring.datasource.username=username
spring.datasource.password=password
spring.datasource.driver-class-name=oracle.jdbc.OracleDriver
#hibernate config
spring.jpa.database-platform=org.hibernate.dialect.Oracle10gDialect
A continuación, agregue las dependencias del conductor y del conjunto de conexiones en pom.xml
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc7</artifactId>
<version>12.1.0.1</version>
</dependency>
<!-- HikariCP connection pool -->
<dependency>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId>
<version>2.6.0</version>
</dependency>
Ver la official doc para más detalles.
- 1. ¿Cómo puedo cancelar una consulta de larga ejecución utilizando Spring y JDBCTemplate?
- 2. JPA vs Spring JdbcTemplate
- 3. Spring JdbcTemplate: ¿cómo limitar las filas seleccionadas?
- 4. ¿Cómo se usa programáticamente JdbcTemplate de Spring?
- 5. JdbcTemplate y transacciones de Spring
- 6. Spring JDBCTemplate Table Locking with MySQL
- 7. ¿Puedo usar alias en una instrucción INSERT?
- 8. INSERT INTO en una instrucción CASE
- 9. Error de interbloqueo en la instrucción INSERT
- 10. Extraer datos utilizando spring jdbctemplate para cargar en una base de datos diferente
- 11. identidad desde la inserción de sql a través de jdbctemplate
- 12. actualizar una fila usando la primavera JdbcTemplate
- 13. Ver el SQL subyacente en Spring JdbcTemplate?
- 14. ¿Puedo usar una subconsulta dentro de una instrucción INSERT?
- 15. Cómo usar 'seleccionar' en la instrucción 'insert' de MySQL
- 16. ¿Cómo pasar múltiples parámetros nombrados a Spring JdbcTemplate?
- 17. ¿Ejecutar INSERT si la tabla está vacía?
- 18. Eventos de Spring Framework
- 19. Comprobando si la instrucción INSERT INTO fue exitosa
- 20. Insertar varias filas usando JdbcTemplate
- 21. Consultar datos utilizando Entity Framework desde la tabla creada dinámicamente
- 22. Errores: "La declaración INSERT EXEC no se puede anidar". y "No se puede usar la instrucción ROLLBACK dentro de una instrucción INSERT-EXEC". ¿Cómo resolver esto?
- 23. MySQL: ¿cuántas filas puedo insertar en una sola instrucción INSERT?
- 24. Mysqldump una instrucción INSERT para cada fila de datos
- 25. consultas paginado con JdbcTemplate
- 26. ¿Cómo uso una cláusula OUTPUT de una instrucción INSERT para obtener el valor de identidad?
- 27. Ejecutar Framework Ejecutar solicitud número
- 28. la forma de ejecutar una instrucción de actualización utilizando Oracle ODP.Net en C#
- 29. @@ IDENTIDAD después de la instrucción INSERT siempre devuelve 0
- 30. "columna no permitido aquí" error en la instrucción INSERT
Tenga en cuenta que existe (¿ahora?) Una sobrecarga que acepta varargs, por lo que ya no necesita crear una nueva matriz. –
@PieterDeBie Pero a veces puede necesitar mapear tipos de parámetros a tipos SQL manualmente :) – user11153
Ah sí, mi mal. No vi la matriz Tipos. –