Java 使用jdbc的Spring插件

Java 使用jdbc的Spring插件,java,spring,sql-insert,jdbctemplate,sqlyog,Java,Spring,Sql Insert,Jdbctemplate,Sqlyog,我在SQLYog中有一个表,其中一列是varchar,长度限制为200。 我为insert编写了下面的方法,但是在测试代码时,DB中的数据并没有填充“Name”列 @Override public void insert(final List<InfoRow> rows) { String sql = "INSERT INTO info_table (ID, NAME, AGE) VALUES (?, SUBSTRING(?, 0, 200), ?)"; jdbcT

我在SQLYog中有一个表,其中一列是varchar,长度限制为200。 我为insert编写了下面的方法,但是在测试代码时,DB中的数据并没有填充“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();
        }
    });

}
@覆盖
公共空白插入(最终列表行){
String sql=“INSERT INTO info_table(ID,NAME,AGE)值(?,子字符串(?,0,200),?)”;
batchUpdate(sql,新的BatchPreparedStatementSetter()){
@凌驾
公共无效设置值(准备的声明ps,int i)
抛出SQLException{
InfoRow row=rows.get(i);
ps.setInt(1,(int)row.getId());
ps.setString(2,row.getName());
ps.setInt(3,(int)row.getAge());
}
@凌驾
public int getBatchSize(){
返回rows.size();
}
});
}
插入时验证“名称”大小的正确方法是什么


谢谢

MySQL中的子字符串表达式(这是基于sqlyog标记的猜测)是基于1的,而不是基于0的。请尝试以下方法:

SUBSTRING(?, 1, 200)
通常,我会将验证逻辑排除在数据库层之外,并在应用层处理“错误输入”。这允许我记录数据将被删除/截断的事实


但是这种方法很好。

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

您应该有一个调用
insert(List)的服务方法,并且必须进行验证