我正在尝试执行一个查询,该查询返回一个名和姓串联在一起的学生,该名与搜索键参数相等。

为此,我在我的类中执行此操作,该类为我的Student类管理与数据库有关的任何事情。

执行查询时,出现以下错误:

com.mysql.jdbc.exceptions.MySQLSyntaxErrorException:

怎么了?我已经检查过正确的way to use concat

namelastName在mysql数据库中为VARCHAR

public static Student findStudent(String key) {
    if (key == null) return null;

    PreparedStatement preparedStatement = null;
    ResultSet rs = null;

    String selectSQL = "select * from project.students where concat(name, lastName) = ? ;";

    try {
      dbConnection = getDBConnection();

      preparedStatement = dbConnection.prepareStatement(selectSQL);
      preparedStatement.setString(1, key);

      Student student = null;
      rs = preparedStatement.executeQuery(selectSQL);
      if (rs.next()) {
          StudentDB.setStudentAttributes(student, rs);
      }

      return student;
    } catch(SQLException e) {
      e.printStackTrace();
    } finally {
      close();
      try {
          if (preparedStatement != null) preparedStatement.close();
          if (rs != null) rs.close();
      } catch(SQLException e) {
          e.printStackTrace();
      }
    }
    return null;
}

最佳答案

您的问题是您准备的陈述



preparedStatement = dbConnection.prepareStatement(selectSQL);


正确,但是当您尝试执行PreparedStatement时,再次提供selectSQL字符串:

rs = preparedStatement.executeQuery(selectSQL);


那是不对的。您已经准备好该语句,因此当需要执行该语句时,您只需执行

rs = preparedStatement.executeQuery();

10-08 09:42