2015-02-11 5 views
0

Я получаю ошибку при выполнении следующего запроса. Я знаю, что мне нужно использовать '?' столько же, сколько размер списка, но размер списка отличается, и я не знаю, как заменить «?».Выполнить запрос IN() SQL с помощью JDBCTemplate

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' здесь:' + ', где S.pnr в (?) "' – Jens

ответ

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

не работает. Кроме того, «pnr» не является списком, а «кодом». Я использовал 'in' в 'C.code in?'. Запрос должен найти оценки всех кодов для каждого pnr. – nahid

+0

@nana Можете ли вы добавить всю стопку? – Jens

+0

Я добавляю его в вопрос – nahid

Смежные вопросы