【问题标题】:Spring insert using jdbc使用 jdbc 进行弹簧插入
【发布时间】:2017-06-10 23:36:46
【问题描述】:

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

}

插入时验证“名称”大小的正确方法是什么?

谢谢!

【问题讨论】:

    标签: java spring sql-insert jdbctemplate sqlyog


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      SUBSTRING(?, 1, 200)
      

      通常,我会将验证逻辑保留在数据库层之外,并在应用程序层处理“错误输入”。这使我可以记录数据将被删除/截断的事实。

      但是这种方法很好。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-06-17
        • 1970-01-01
        • 2023-03-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多