How to execute INSERT statement using JdbcTemplate class from Spring Framework

JavaSpringJdbctemplate

Java Problem Overview


In Spring, how can I insert data in table using JdbcTemplate. Can anyone please provide me a code sample for doing this.

Java Solutions


Solution 1 - Java

Use jdbcTemplate.update(String sql, Object... args) method:

jdbcTemplate.update(
    "INSERT INTO schema.tableName (column1, column2) VALUES (?, ?)",
    var1, var2
);

or jdbcTemplate.update(String sql, Object[] args, int[] argTypes), if you need to map arguments to SQL types manually:

jdbcTemplate.update(
    "INSERT INTO schema.tableName (column1, column2) VALUES (?, ?)",
    new Object[]{var1, var2}, new Object[]{Types.TYPE_OF_VAR1, Types.TYPE_OF_VAR2}
);

Solution 2 - Java

If you are planning to use JdbcTemplate in multiple locations, it would be a good idea to create a Spring Bean for it.

Using Java Config it would be:

@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());
   }

}

Then a repository that uses that JdbcTemplate could be:

@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)
   }
}

The update method from JdbcTemplate that I have used can be found here.

Solution 3 - Java

You can alternatively use NamedParameterJdbcTemplate (naming can be useful when you have many parameters)

Map<String, Object> params = new HashMap<>();
params.put("var1",value1); 
params.put("var2",value2); 
namedJdbcTemplate.update(
    "INSERT INTO schema.tableName (column1, column2) VALUES (:var1, :var2)",
    params
);

Solution 4 - Java

If you use spring-boot, you don't need to create a DataSource class, just specify the data url/username/password/driver in application.properties, then you can simply @Autowired it.

@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')");
    }
}

Example of 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

Then add the driver and connection pool dependencies in 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>

See the official doc for more details.

Solution 5 - Java

You'll need a datasource for working with 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;
        }
    });

Solution 6 - Java

we can use update for both insert and update/delte

enter image description here

enter link description here

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
Questionuser469999View Question on Stackoverflow
Solution 1 - Javauser11153View Answer on Stackoverflow
Solution 2 - JavageoandView Answer on Stackoverflow
Solution 3 - JavanaimdjonView Answer on Stackoverflow
Solution 4 - JavaSeareneView Answer on Stackoverflow
Solution 5 - JavaSezin KarliView Answer on Stackoverflow
Solution 6 - JavajcrshankarView Answer on Stackoverflow