com.mysql.jdbc.exceptions.MySQLSyntaxErrorException 使用 PreparedStatement 时

Posted

技术标签:

【中文标题】com.mysql.jdbc.exceptions.MySQLSyntaxErrorException 使用 PreparedStatement 时【英文标题】:com.mysql.jdbc.exceptions.MySQLSyntaxErrorException when using PreparedStatement 【发布时间】:2015-10-16 20:54:02 【问题描述】:

我正在尝试执行一个查询,该查询返回一个学生的姓名和姓氏连接等于搜索键参数。

为此,我在我的班级中为我的Student 班级管理与数据库相关的任何内容。

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

com.mysql.jdbc.exceptions.MySQLSyntaxErrorException:

怎么了?我检查了这是正确的way to useconcat

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;

【问题讨论】:

您收到的完整错误消息是什么?考虑将您的 catch 块更改为将打印所有可用信息(而不仅仅是打印堆栈跟踪)的东西 - 用于调试,将其重新抛出为 throw new RuntimeException(e); 以查看是否会产生更具体的错误消息。 另外,您可以尝试删除结尾的分号(不确定是否会有所帮助,但某些 JDBC 驱动程序不喜欢它们) preparedStatement.executeUpdate(); ??? 我同意@PetterFriberg; .executeUpdate() 是行不通的。而且,StudentDB 引用是什么,.setStudentAttributes 方法调用实际上在做什么?我认为您必须添加更多细节才能获得帮助- 【参考方案1】:

你的问题是你准备声明

preparedStatement = dbConnection.prepareStatement(selectSQL);

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

rs = preparedStatement.executeQuery(selectSQL);

这是不正确的。你已经准备好了语句,所以到了执行它的时候你就去做

rs = preparedStatement.executeQuery();

【讨论】:

以上是关于com.mysql.jdbc.exceptions.MySQLSyntaxErrorException 使用 PreparedStatement 时的主要内容,如果未能解决你的问题,请参考以下文章

com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException:重复条目 '' 键 'PRIMARY'

com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:通信链路故障?

错误 com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:表不存在

使用 JDBC 访问远程 MySQL 数据库时出现 com.mysql.jdbc.exceptions.jdbc4.CommunicationsException

com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:通信链路故障