Spring 使用 jdbc 插入

Spring insert using jdbc

我在 SQLYog 中有一个 table,其中一列的 varchar 长度限制为 200。 我为插入编写了下面的方法,但是在测试代码时,"Name" 列没有被数据库中的数据填充。

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

}

插入时验证 'Name' 大小的正确方法是什么?

谢谢!

MySQL中的子串表达式(这是基于sqlyog标签的猜测)是基于1的,不是基于0的。试试这个:

SUBSTRING(?, 1, 200)

通常,我会将验证逻辑放在数据库层之外,并在应用程序层处理 "bad input"。这使我可以记录数据为 dropped/truncated 的事实。

但是这个方法很好。

验证输入的正确方法是在您的服务层而不是您在此处描述的模型层。 DAO 应该只负责持久化数据而不是验证。

您应该有一个调用 insert(List<InfoRow>); 方法的服务,并且必须有您的验证。