jdbcTemplate.batchUpdate не вставляет строки - PullRequest
0 голосов
/ 18 ноября 2018

Я пытаюсь выполнить пакетную вставку, но при запуске в Tomcat приложение зависает, и новые строки не вставляются. Ниже мой код:

public class MatchDAOImpl implements MatchDAO {

    private JdbcTemplate jdbcTemplate;

    public MatchDAOImpl(DataSource dataSource) {
        jdbcTemplate = new JdbcTemplate(dataSource);
    }

    @Override
    public void batchInsert(final List<Match> matches){

        String sql = "INSERT INTO matches (id, status, home_team_id, away_team_id, home_goals, away_goals) VALUES (?, ?, ?, ?, ?, ?)";

        jdbcTemplate.batchUpdate(sql, new BatchPreparedStatementSetter() {

            @Override
            public void setValues(PreparedStatement ps, int i) throws SQLException {
                Match match = matches.get(i);
                System.out.println("Inserting values for #" + match.getId());
                ps.setInt(1, match.getId());
                ps.setString(2, match.getStatus());
                ps.setInt(3, match.getHomeTeam().getId());
                ps.setInt(4, match.getAwayTeam().getId());
                ps.setInt(5, match.getHomeGoals());
                ps.setInt(6, match.getAwayGoals());
            }

            @Override
            public int getBatchSize() {
                return matches.size();
            }
        });
    }

Вот пример того, как это называется:

matchesDAO.batchInsert(matches);

Кроме того, вы увидите, что у меня есть команда println, поэтому я знаю, что по крайней мере этот метод используется. Ниже приведен пример вывода из этого:

Inserting values for #233398
Inserting values for #233399
Inserting values for #233400
Inserting values for #233401
Inserting values for #233402
...

Однако, когда я проверяю базу данных на наличие новых строк, их нет (пустая таблица). Я не получаю никаких исключений, чтобы указать, в чем проблема. Мой метод выглядит хорошо?

UPDATE

MvcConfig.java

@Configuration
@ComponentScan(basePackages="com.example.budget")
@EnableWebMvc
public class MvcConfiguration extends WebMvcConfigurerAdapter{

    //...

    @Bean
    public DataSource getDataSource() {
        DriverManagerDataSource dataSource = new DriverManagerDataSource();
//      dataSource.setDriverClassName("oracle.jdbc.driver.OracleDriver");
        dataSource.setDriverClassName( OracleDriver.class.getName() );
        dataSource.setUrl("jdbc:oracle:thin:@localhost:1521:xe");
        dataSource.setUsername("budget_admin");
        dataSource.setPassword("budg3t");

        return dataSource;
    }

    @Bean
    public MatchDAO getMatchDAO() {
        return new MatchDAOImpl(getDataSource());
    }

Вот где сейчас вызывается batchInsert:

@Controller
public class MatchesController {

    @Autowired
    private FootballData footballData;

    @Autowired 
    private MatchDAO matchDAOImpl;

    @RequestMapping(value = "/api/matches")
    public ModelAndView matches(ModelAndView model) {

        List<Match> matches = footballData.requestMatches();

        // write to db
        matchDAOImpl.batchInsert(matches);

        model.addObject("matches", matches);
        model.setViewName("matches");

        return model;
    }
...