【问题标题】:You have an error in your SQL syntax check the manual JAVA您的 SQL 语法有错误,请检查手册 JAVA
【发布时间】:2019-06-21 12:31:19
【问题描述】:

我在尝试运行此代码时遇到此错误 你有一个错误 你的 SQL 语法;检查与您的 MySQL 服务器版本相对应的手册 在第 1 行的 ''And StatusMembership=Active' 附近使用正确的语法

public boolean checkLenderToIfExists(BorrowedBook borrowedBook) throws SQLException {
    try {
        Statement stmt = con.createStatement();
        ResultSet rs = stmt.executeQuery("SELECT * FROM library_students.student WHERE StudentID='"+ borrowedBook.getLenderTo()+"'And Permission=1"+"'And StatusMembership='Active'");
        if (!(rs.next())) {
            return false;
        }
        rs.close();
        return true;
    } catch (SQLException ex) {
        ex.printStackTrace();
        return false;
    }

【问题讨论】:

  • '我认为你需要先删除那个'那里。或者你在 1 之前需要一个
  • 该错误告诉您 SQL 代码中存在错误,而不是在生成您的 SQL 代码的 Java 代码中。首先查看错误发生时"SELECT * FROM library_students.student WHERE StudentID='"+ borrowedBook.getLenderTo()+"'And Permission=1"+"'And StatusMembership='Active'" 的运行时值。
  • 为了防止更多此类错误和SQL注入,建议你使用prepared statements
  • 你应该了解prepared statements
  • 查询中没有空格?

标签: java mysql sql


【解决方案1】:

您正在生成下一个查询:

SELECT * FROM library_students.student WHERE StudentID='10'And 
Permission=1'And StatusMembership='Active'

这个错误可能是因为Permission=1'And 中多余的单引号 '

【讨论】:

    【解决方案2】:

    这可能是由于查询中的间距而发生的。使用PreparedStatement 尝试以下格式:

    PreparedStatement preparedStatement = conn.prepareStatement("SELECT * FROM "
            + "library_students.student WHERE StudentID= ? "
            + "AND Permission=1 AND StatusMembership='Active'");
    preparedStatement.setInt(1, borrowedBook.getLenderTo());
    ResultSet rs = preparedStatement.executeQuery();
    

    另外,here's 有一些关于为什么在这种情况下应该使用 PreparedStatement 的奖励阅读。

    【讨论】:

    • Darshan 我认为这将是问题所在,缺少空格(因此我赞成),但是...检查一下DB Fiddle
    • @Cid 您是否尝试在控制台中复制粘贴上述查询?我认为它可能是间距和引号。但是,我建议 PreparedStatement 解决方案来摆脱引号并进行干净的查询。
    • 你是说娜雅的吗?
    • 我完全同意你关于空格和准备好的语句(这里太多人不关心它)但看起来 MySQL 接受这样的语句StudentID='10'And Permission=1
    • @Cid 同意,MySQL 确实接受这样的参数。我已经更新了我的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多