【问题标题】:SELECT with WHERE using PreparedStatementSELECT with WHERE using PreparedStatement
【发布时间】:2014-10-14 17:08:40
【问题描述】:

我有这种方法,它可以通过电影 ID 从 MySQL 数据库中选择电影放映时间,并将它们放入 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 示例(如果有帮助的话)。有什么问题?

【问题讨论】:

  • 你可以发布堆栈跟踪吗?
  • 嗨,堆栈跟踪已添加到帖子中(“根据跟踪”)。
  • 请在您的帖子中包含堆栈跟踪的文本,而不是链接到它。

标签: java mysql sql jdbc prepared-statement


【解决方案1】:

您正在调用PreparedStatement 中的executeQuery(String) 方法,而该调用只是继承自Statement。但是Statement 只是在没有任何PreparedStatement 占位符语义的情况下执行查询,因此会出现错误。

相反,您想拨打executeQuery() (no arguments) method。 SQL 已经准备好,所有占位符都已赋值,因此不再需要 SQL 参数字符串。

rs = ps.executeQuery();

【讨论】:

    猜你喜欢
    • 2021-05-28
    • 1970-01-01
    • 2011-11-28
    • 1970-01-01
    • 2011-08-11
    • 1970-01-01
    • 2013-04-08
    • 2017-11-17
    • 1970-01-01
    相关资源
    最近更新 更多