2015-02-11 61 views
0

运行以下查询时出现错误。我知道我需要使用'?'与列表大小一样多,但列表大小不同,我不知道如何替换'?'。使用JDBCTemplate执行IN()SQL查询

public List<Object> findAllGrades(String pnr, List<String>codes) { 
    return jdbcTemplate.query(
      "select CourseParticipantship.grade from [thd].[dbo].[CourseParticipantship] " 
        + "inner join thd.dbo.CourseMaterial on courseMaterial_id = CourseMaterial.id " 
        + "inner join thd.dbo.Course on course_id = Course.id and Course.code in (?)" 
        + "inner join thd.dbo.Student on student_id = Student.id " 
        + "where Student.personalNumber in (?)",new Object[] { codes, pnr }, new RowMapper() { 
       public Object mapRow(ResultSet rs, int arg1) throws SQLException { 
        return rs.getObject("grade"); 
       } 
      }); 
} 

我得到这个错误:Unable to convert between java.util.ArrayList and JAVA_OBJECT

+1

您应该在这里使用'in':'+“,其中(?)”' – Jens 2015-02-11 10:13:56

回答

1

你应该在这里使用:+ "where S.pnr in (?)"

你必须改变

+ "where S.pnr= ?",new Object[] { codes, pnr }, new RowMapper() {

+ "where S.pnr in (?)",new Object[] { codes, pnr }, new RowMapper() { 
+0

中的S.pnr不起作用。 'pnr'也不是一个列表,但是'code'是。我在'C.code in?'中使用'in'。该查询应该为每个pnr找到所有代码的等级。 – nahid 2015-02-11 10:26:06

+0

@nana你可以请添加整个stacktrace吗? – Jens 2015-02-11 11:26:16

+0

我在问题中加入 – nahid 2015-02-11 12:19:57