Пружинная вставка с использованием jdbc

У меня есть таблица в SQLYog, где один столбец имеет ограничение длины varchar до 200. Я написал метод ниже для вставки, но при тестировании кода столбец «Имя» не заполняется данными в БД.

@Override
public void insert(final List<InfoRow> rows) {
    String sql = "INSERT INTO info_table (ID, NAME, AGE) VALUES (?, SUBSTRING(?, 0, 200), ?)";

    jdbcTemplate.batchUpdate(sql, new BatchPreparedStatementSetter() {

        @Override
        public void setValues(PreparedStatement ps, int i)
                throws SQLException {
            InfoRow row= rows.get(i);
            ps.setInt(1, (int) row.getId());
            ps.setString(2, row.getName());
            ps.setInt(3,(int) row.getAge());
        }

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

}

Каков правильный способ проверки размера имени при вставке?

Спасибо!


person userit1985    schedule 25.01.2017    source источник


Ответы (2)


Выражения подстроки в MySQL (это предположение основано на теге sqlyog) основаны на 1, а не на 0. Попробуйте это вместо этого:

SUBSTRING(?, 1, 200)

Как правило, я бы оставил логику проверки вне уровня базы данных и обрабатывал «неверный ввод» на уровне приложения. Это позволяет мне регистрировать тот факт, что данные будут удалены/усечены.

Но этот подход хорош.

person Brendan Lesniak    schedule 25.01.2017

Правильный способ проверки входных данных находится на уровне вашего сервиса, а не на уровне модели, как вы описываете здесь. DAO должен нести ответственность только за сохранение данных, а не за их проверку.

У вас должна быть служба, вызывающая метод insert(List<InfoRow>);, и должна быть ваша проверка.

person Gabriel Villacis    schedule 25.01.2017