使用PreparedStatement选择WHERE

时间:2014-10-14 17:08:41

标签: java mysql sql jdbc prepared-statement

我有这种方法可以从MySQL数据库中按电影ID选择电影放映时间并将它们放在Time []中。但是,根据trace,它会在'? ORDER BY schedule_id'附近抛出语法异常。

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 个答案:

答案 0 :(得分:2)

您正在executeQuery(String)中调用PreparedStatement方法,该通话仅从Statement继承。但是Statement只执行查询而没有任何PreparedStatement占位符语义,因此错误。

相反,您想要调用executeQuery() (no arguments) method。 SQL已经准备好了,并且所有占位符都已分配了值,因此不再需要SQL参数字符串。

rs = ps.executeQuery();