69

Spring では、 JdbcTemplateを使用してテーブルにデータを挿入するにはどうすればよいですか。誰でもこれを行うためのコードサンプルを提供してもらえますか?

4

6 に答える 6

79

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

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

または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}
);
于 2014-05-27T11:55:10.067 に答える
12

複数の場所で 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());
   }

}

次に、その 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)
   }
}

私が使用した JdbcTemplate の update メソッドは、こちらにあります

于 2014-05-27T12:11:40.073 に答える
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;
        }
    });
于 2011-11-14T22:48:49.823 に答える