java - SQL错误语法,请检查与您的MariaDB服务器版本对应的手册以获取正确的语法

标签 java sql insert mariadb

我尝试使用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

希望您能帮帮我,谢谢。

最佳答案

我在这里看到了几个潜在的问题。首先,您将 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

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

关于java - SQL错误语法,请检查与您的MariaDB服务器版本对应的手册以获取正确的语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59705453/

相关文章:

java - 寻找树结构的最长路径

java - 为什么 Java 编译器 (javac) 不区分大小写,而 java(解释器)区分大小写?

java - 我收到一条错误,指出 "address"列不能为空

mysql - 如何编写查询以从 SQLite/MySQL 检索最后更新的行?

vim - 如何在 Vim 中切换命令模式和插入模式?

java - 如何在同一个类的另一个方法中从 "onCreate()"访问 Arraylist 变量?

java - 如何将十六进制转换为base64

java - 如何使用 SWT 和 MySql 在 TreeView 中显示列表值

database - KDB 中插入和更新插入的行为

php - 将chunk中的记录插入到mysql View 中