我尝试使用jdbcTemplate.batchUpdate
向亲戚表添加多个数据:
我试图从学生表中选择maxid
,并已在插入查询中用作ID。
这是我的代码:
List<Relatives> relatives=student.getRelatives();
String sql3="Select Id,Name from Student where Id=(select Max(Id) from student)";
final Student student1= (Student) jdbcTemplate.query(sql3, new UserMapper5());
String sql4 = " INSERT INTO Relatives (StudentId,RelativeId,YearId,ClassId,SectionId,RelationshipId,IsDeleted,CreatedBy,CreatedDate) "+
" Values(?,?,?,?,?,?,?,?,GETDATE())";
int[][] updateCounts = jdbcTemplate.batchUpdate(sql4, relatives, relatives.size(),
new ParameterizedPreparedStatementSetter<Relatives>() {
public void setValues(PreparedStatement ps, Relatives relative) throws SQLException {
ps.setInt(1, student1.getId());
ps.setString(2, relative.getStudent().getName());
ps.setInt(3, relative.getStudent().getYear().getId());
ps.setInt(4, relative.getStudent().getClasss().getId());
ps.setInt(5, relative.getStudent().getSection().getId());
ps.setInt(6, relative.getRelationship().getId());
ps.setInt(7, 0);
ps.setInt(8,123);
}
}
);
当我尝试向亲戚表中插入多个数据时,出现以下错误:
java.lang.ClassCastException:java.util.ArrayList无法转换为com.cloudnexus.spring.model.Student
答案 0 :(得分:2)
README与RowMapper
返回一个列表,然后如果不为空,则获取该学生:
List<Student> studentList = jdbcTemplate.query(...
if (!studentList.isEmpty()){
Student student1 = studentList.get(0);
返回: 结果列表,其中包含映射的对象
答案 1 :(得分:1)
使用jdbcTemplate.queryForObject
可以返回Object所期望的内容。您正在使用的当前方法返回的列表不是您所期望的(根据sql query
,它应该仅返回一个记录)。
答案 2 :(得分:0)
这将解决您的问题:
final Student student1= (Student) jdbcTemplate.queryForObject(sql3, new UserMapper5());
此外,您可以将UserMapper5
设为通用类型,并避免强制转换:
public class UserMapper5<T> implements RowMapper {
public T mapRow(ResultSet rs, int rowNum) throws SQLException {
/// ...
}
}
然后:
final Student student1= jdbcTemplate.queryForObject(sql3, new UserMapper5<Student>());