当前位置: 首页 > 面试题库 >

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

东博瀚
2023-03-14
问题内容

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

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

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

com.mysql.jdbc.exceptions.MySQLSyntaxErrorException:

怎么了?我已经检查过这是正确的使用方法 concat

name并且lastNameVARCHAR在MySQL数据库中。

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();


 类似资料:
  • 当我试图执行这条语句时,出现了错误。我创建了一个包含表名的数组mem[],每个表中有两列,分别是amt(float(9,2))和comb(varchar(5))。 我在for循环中使用了这个语句: 错误: 通用域名格式。mysql。jdbc。例外情况。jdbc4.MySQLSyntaxErrorException:您的SQL语法有错误;查看与MySQL服务器版本对应的手册,以了解在第1行“akhi

  • 问题内容: 为了使我们的代码更加标准,我们被要求更改将SQL变量硬编码为预处理语句的所有位置,然后绑定这些变量。 但是我遇到了问题。 这是代码: 我在执行SQL时收到此错误: 我应该改为使用? 问题答案: Using 使用 如果您的表的列类型为: 该方法接收到一个字符串,该字符串表示格式为日期的日期。例如: 假设您有一个type类型的变量,则可以这样进行转换: 当前的 如果要插入当前日期: Usi

  • 为了使我们的代码更加标准,我们被要求将所有我们将SQL变量硬编码为准备好的语句的地方改为绑定变量。

  • 问题内容: 我在我们的代码库上运行了findbugs,它指出还有两个语句仍需要关闭。在代码的这一部分中,我们运行: 3个不同的查询,重用prepareStatement。在finally块中,我们确实关闭了资源: 应该在下一个连接之前关闭该语句。prepareStatement(query); 还是这个findbug谨慎? 问题答案: 是的,在执行下一个connection.prepareStat

  • 问题内容: 为了使我们的代码更加标准,我们被要求更改将SQL变量硬编码为预处理语句的所有位置,然后绑定变量。 但是我遇到了问题。 这是代码: 执行SQL时出现此错误: 我应该改为使用? 问题答案: 使用 java.sql.Date 如果表中的列类型为DATE: 该方法接收到一个字符串,该字符串代表格式的日期。例如: 假设你有一个类型的变量,则可以这样进行转换: 当前 如果要插入当前日期: 使用 j

  • 问题内容: 有人可以解释如何使用完全准备好的使用dbcp的连接池吗?(如果可能,请提供一些示例代码)。我已经弄清楚了如何打开它- 将KeyedObjectPoolFactory传递给PoolableConnectionFactory。但是,那之后如何定义特定的准备好的语句呢?现在,我仅使用PoolingDataSource从池中获取连接。如何使用池中准备好的语句? 问题答案: 在谈论从池中获得连接