【问题标题】:SQL error syntax, please check the manual that corresponds to your MariaDB server version for the right syntax to useSQL 错误语法,请查看与您的 MariaDB 服务器版本相对应的手册以获取正确的语法使用
【发布时间】:2020-04-29 12:10:18
【问题描述】:

我尝试使用preparedStatement 向表中插入一个新值,但我得到一个我无法解决的语法错误。

Java 代码:

String sql2 = "INSERT INTO Repondre VALUES ( ?, ?, ?, ?)";
preparedStatement = connection.prepareStatement(sql2);
preparedStatement.setInt(1, 1);
preparedStatement.setInt(2, 1);
preparedStatement.setInt(3,resultSet.getInt(1));
RadioButton rb = (RadioButton)q1.getSelectedToggle();
preparedStatement.setString(4,rb.getText().toLowerCase());
preparedStatement.executeUpdate(sql2);

错误代码:

java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '?, ?, ?, ?)' at line 1

希望你能帮我谢谢。

【问题讨论】:

    标签: java sql insert mariadb


    【解决方案1】:

    我在这里看到了几个潜在的问题。首先,您将 SQL 字符串传递给 executeUpdate(),这是不正确的。这是错误的,因为您要调用的该方法的版本是用于准备好的语句,并且它不接受任何输入参数(您正在调用 Statement 版本)。其次,您忽略了列出要在表中针对插入数据的列。通常,您应该始终明确列出插入中的所有列。将这两者放在一起,我们可以尝试以下更正版本:

    String sql = "INSERT INTO Repondre (col1, col2, col3, col4) VALUES (?, ?, ?, ?)";
    PreparedStatement ps = connection.prepareStatement(sql2);
    ps.setInt(1, 1);
    ps.setInt(2, 1);
    ps.setInt(3, resultSet.getInt(1));
    RadioButton rb = (RadioButton)q1.getSelectedToggle();
    ps.setString(4, rb.getText().toLowerCase());
    preparedStatement.executeUpdate();   // NO parameters here
    

    注意:明确列出列很重要,因为您希望将数据插入正确的位置。有时,可能不列出列,并且您提到的数据碰巧都具有相同的类型。这可能会导致一个微妙的错误。

    【讨论】:

      猜你喜欢
      • 2020-02-05
      • 2017-02-11
      • 2016-06-17
      • 2021-05-12
      • 2018-11-27
      • 2022-01-14
      • 2019-10-24
      • 1970-01-01
      • 2020-05-07
      相关资源
      最近更新 更多