java - SQL 错误语法,请查看与您的 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
注意:明确列出列很重要,因为您希望将数据插入正确的位置。有时,可能不列出列,并且您提到的数据碰巧都具有相同的类型。这可能会导致一个微妙的错误。
推荐阅读
- jquery - 由于 VueJS,模态不会使用 jQuery 关闭
- ios - IOS Swift 4 隐藏键盘,同时点击周围干扰按钮按下
- r - 如何遍历列表并在 R 中创建单独的数据框
- coq - 证明函数应用在两个等价函数上的相等性
- php - PHP 将数字截断为最多 15 位,以实现与 MS Excel 中相似的精度
- c++ - 是否会为非类型模板参数的不同值实例化新类
- spring - Spring Boot JTA with Artemis Issue
- elasticsearch - 如何列出 Elasticsearch 集群上所有存储的脚本?
- firebase - How can i limit login on 3 devices max on Firebase at the same time
- c++ - 如果元素类型是原始类型,std::vector::resize() 是否向下花费 O(1) 时间?