【问题标题】:right syntax to use near '?'在“?”附近使用正确的语法
【发布时间】:2014-09-15 01:49:45
【问题描述】:

我有一个 Java 代码:

String searchPerson = "select * from persons where surname like ? and name like ?";
//connect to DB
PreparedStatement statement = connect.prepareStatement(searchPerson);
statement.setString(1,"%"+ surname + "%");
statement.setString(2, "%" + name + "%");
ResultSet resultPerson = statement.executeQuery(searchPerson);
//..code

然后我有 SQLException:

您的 SQL 语法有错误;查看与您的 MySQL 服务器版本相对应的手册,了解在 '?' 附近使用的正确语法

【问题讨论】:

  • @AdamYost:不,他没有,这就是重点?占位符
  • 我设置字符串时出错:code statement.setString(1,"%"+ surname + "%"); statement.setString(2, "%" + name + "%"); code
  • 我猜这是mysql错误之一。将您的声明更改为 like '%' || ? || '%' 并使用 .setString(1, surname) 它应该可以工作
  • @mvp 比我有:您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以了解在 '? 附近使用的正确语法。 || '%''

标签: java mysql sql jdbc prepared-statement


【解决方案1】:

试试statement.setString(1,"'%"+ surname + "%'");

【讨论】:

  • 这里不需要单引号。
【解决方案2】:
ResultSet resultPerson = statement.executeQuery(searchPerson);

应该是

ResultSet resultPerson = statement.executeQuery();

【讨论】:

    【解决方案3】:

    您应该执行不带参数的PrepareStatement,如下所示:

    statement.executeQuery()
    

    使用String 参数调用executeQuery 将按原样执行提供的查询(没有绑定参数)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-12-12
      • 2013-12-16
      • 1970-01-01
      • 2018-08-14
      • 2011-03-11
      • 2014-02-16
      相关资源
      最近更新 更多