【问题标题】:Error in JDBC queryJDBC 查询错误
【发布时间】:2011-01-23 07:15:44
【问题描述】:
sql  = "select milk_rate from special_milk_rate 
        where code_producer_id=? and effective_from <= ? 
        and effective_till >= ?"

在我的 JDBC 代码中,此查询出现错误

异常:com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以了解在 '? 附近使用的正确语法。和 effective_from =?'在第 1 行

但是当我在 MySQL 命令提示符下使用一些值运行它时,它在那里运行良好。

【问题讨论】:

  • 您应该添加mysqljdbcsql 等标签以获得更多答案。
  • 查询没问题,您的 PreparedStatement 有问题。显示 Java 代码。
  • 嘿,谁能告诉我这个查询是做什么的??

标签: java sql jdbc


【解决方案1】:
ResultSet rst= prest.executeQuery(sql);

这是不正确的。它应该是 executeQuery()。

使用语句时,sql 被传递执行。它在使用绑定变量时被传递给 PreparedStatement。由于您使用的是 Statement API,因此 JDBC 正在执行它而无需替换您的绑定变量,并且不知道如何处理文字问号。

【讨论】:

    【解决方案2】:

    您必须使用准备好的语句而不是“普通”语句才能将问号替换为参数。

    【讨论】:

    • 嗨,我正在使用 preparestatement 我的代码是 sql = " select milk_rate from special_milk_rate where code_producer_id='? and effective_from = '?" prest=conn.prepareStatement(sql) prest.setLong(1,id) prest.setDate(2,sqlDate) prest.setDate(3,sqlDate) ResultSet rst= prest.executeQuery(sql);
    • 去掉准备好的语句中的单引号。
    • @Costis 是正确的。此外,您似乎缺少每条语句后的分号。
    猜你喜欢
    • 2012-05-27
    • 1970-01-01
    • 2018-04-12
    • 1970-01-01
    • 2016-01-04
    • 1970-01-01
    • 2015-08-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多