如何使用Spring Framework中的JdbcTemplate类执行INSERT语句

use*_*999 41 java spring jdbctemplate

在Spring中,如何使用JdbcTemplate在表中插入数据.任何人都可以为我提供代码示例.

use*_*153 44

使用jdbcTemplate.update(String sql, Object... args)方法:

jdbcTemplate.update(
    "INSERT INTO schema.tableName (column1, column2) VALUES (?, ?)",
    var1, var2
);
Run Code Online (Sandbox Code Playgroud)

或者jdbcTemplate.update(String sql, Object[] args, int[] argTypes),如果您需要手动将参数映射到SQL类型:

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


nai*_*jon 12

您也可以使用NamedParameterJdbcTemplate(当您有很多参数时命名可能很有用)

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
);
Run Code Online (Sandbox Code Playgroud)


geo*_*and 7

如果您计划在多个位置使用JdbcTemplate,那么为它创建一个Spring Bean是个好主意.

使用Java Config将是:

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

}
Run Code Online (Sandbox Code Playgroud)

然后,使用该JdbcTemplate的存储库可以是:

@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)
   }
}
Run Code Online (Sandbox Code Playgroud)

我在这里可以找到JdbcTemplate的更新方法.


Sez*_*rli 3

您需要一个datasource用于使用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;
        }
    });
Run Code Online (Sandbox Code Playgroud)