【问题标题】:SQL Parameter out of index errorSQL 参数超出索引错误
【发布时间】:2015-03-23 05:43:05
【问题描述】:

当我尝试执行这段代码时出现此错误。当我删除问号的引号时,它会显示“您的 SQL 语法有错误;” 有人可以帮我解决这个问题吗?

String query = "select date from ticket where date >='?' and date <= '?'  ";

        PreparedStatement pstmt1 =  con.prepareStatement(query);
        pstmt1.setString(1, fromdate);
        pstmt1.setString(2, todate);
        pstmt1.executeQuery(query);

【问题讨论】:

  • 你不要引用参数,直接用where date &gt;= ? and date &lt;= ?
  • 我删除了引号,它说你的 SQL 语法有错误
  • 错误是什么?另外,你见过BETWEEN 子句吗,例如WHERE date BETWEEN ? AND ?
  • 查看与您的 MySQL 服务器版本相对应的手册,以了解在 '?和日期
  • 使用当前代码更新您的问题。不要输入,复制粘贴

标签: java mysql


【解决方案1】:

您的实际错误是您正在执行 查询字符串本身,而不是准备好的语句:

pstmt1.executeQuery(query);

PreparedStatement 接口中没有executeQuery(String),而是恢复为来自Statement 接口的那个,它只是按原样运行字符串作为查询。这意味着它会痛苦地抱怨,因为? 在这种情况下被认为是无效的。

应该只是在使用(包括检索结果集):

ResultSet rs = pstmt1.executeQuery();

所以查询执行是在准备好的语句上下文而不是语句上下文中完成的。

【讨论】:

【解决方案2】:

不要用引号将占位符括起来

String query = "select date from ticket where date >='?' and date <= '?'  ";

java API 将负责为特殊字符添加引号和转义序列,这就足够了:

String query = "select date from ticket where date >=? and date <= ?  ";

【讨论】:

    【解决方案3】:

    setString(...) --> setDate(...)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-01-16
      • 1970-01-01
      • 2017-08-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多