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>);
方法的服务,并且必须有您的验证。
我在 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>);
方法的服务,并且必须有您的验证。