2014-10-14 2 views
1

У меня есть этот метод, который выбирает киносессии по идентификатору фильма из базы данных MySQL и помещает их в Time []. Однако он выбрасывает исключение синтаксиса около '? ORDER BY schedule_id' в соответствии с trace.SELECT with WHERE using PreparedStatement

public Time[] getShowTimes(int movieId) { 
    List<Time> list = new ArrayList<Time>(); 

    try { 
     sql = "SELECT schedule_time FROM schedule WHERE movie_id = ? ORDER BY schedule_id"; 

     ps = conn.prepareStatement(sql); 
     ps.setInt(1, movieId); 

     rs = ps.executeQuery(sql); 

     while(rs.next()) { 
      list.add(rs.getTime(1)); 
     } 

    } catch(SQLException se) { 
     se.printStackTrace(); 
    } 

    Time[] times = new Time[list.size()]; 
    times = list.toArray(times); 

    return times; 
} 

Я следовал примеру this (если это помогает). Что может быть неправильным?

+1

Можете ли вы опубликовать stacktrace? – Vladimir

+0

Привет, stacktrace добавлен в сообщение («по следам»). – silver

+0

Пожалуйста, включите текст трассировки стека в свой пост, вместо того, чтобы связываться с ним. – rgettman

ответ

2

Вы вызываете метод executeQuery(String) в свой PreparedStatement, и этот вызов только что унаследован от Statement. Но Statement просто выполняет запрос без какой-либо PreparedStatement семантики-заполнителя, отсюда и ошибка.

Вместо этого вы хотите позвонить в executeQuery() (no arguments) method. SQL уже подготовлен, и всем заполнителям присвоены значения, поэтому строка аргументов SQL больше не нужна.

rs = ps.executeQuery(); 
+1

@ohtph, это должно быть правильно. Пожалуйста, попробуйте это. – gmarintes

+0

Это правильно, рекомендуется и принято. Спасибо. – silver