我正在使用spring jdbc。我的SQL查询涉及' IN'条款,我动态创建'?'基于输入和传递 查询spring jdbc模板方法的对象数组。
public List<Student> getStudentName(String studentId){
//studentId contains number of ids sepeated by comma.
Object [] params= new Object[]{studentId.split(",")}
Stream<String> stream= Arrays.stream(studentId.split(","));
final String stInClauseParameters= stream.map(studentId -> "?").collect((Collectors.joining(",")));
StringBuilder sql = new StringBuilder();
sql.append(" select studentName from Student where student_id IN ("+stInClauseParameters+")")
return JdbcTemplate.query(sql.toString(),params, new BeanPropertyRowMapper(Student.class))
}
错误
Prepared Statement: Input parameter not set, index: 1.; nested exception is java.sql.SQLException: JZ0SA: Prepared Statement: Input parameter not set, index: 1
如何在spring jdbc查询方法中使用数组?
答案 0 :(得分:4)
更简单的方法是使用NamedParameterJdbcTemplate,它可以为您动态处理in子句。
一个例子是
public class StudentDao extends JdbcDaoSupport {
public List<Student> getStudentName(String studentId) {
List<String> studentIds = Arrays.asList(studentId.split(","));
String sql = "SELECT studentName FROM Student WHERE student_id IN (:ids)";
Map<String, List<String>> params = new HashMap<String, List<String>>();
params.put("ids", studentIds);
NamedParameterJdbcTemplate template = new NamedParameterJdbcTemplate(getDataSource());
return template.query(sql, params, new BeanPropertyRowMapper(Student.class));
}
}