尽管语句正确,JDBC 返回 MySQLSyntaxError 异常
尝试将新行插入 MySQL 表时,Java 应用程序遇到 MySQLSyntaxError 异常。检查 SQL 语句后,发现它在语法上是正确的。然而,当直接使用MySQL Workbench执行时,该语句成功了。
相关代码使用PreparedStatement来执行INSERT语句,如下所示:
<code class="java">PreparedStatement sInserim = conn.prepareStatement(sqlCommandInserim); sInserim.setString(1, utente); sInserim.setString(2, nome); sInserim.executeUpdate(sqlCommandInserim);</code>
遇到的异常是:
<code class="text">com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '? , ? , DEFAULT , NULL )' at line 1</code>
经过仔细检查,发现占位符(?)没有被PreparedStatement正确替换。从以下行可以明显看出这一点:
<code class="java">sInserim.executeUpdate(sqlCommandInserim);</code>
使用原始 SQL 字符串作为参数调用executeUpdate() 方法,而不是使用带有其设置值的PreparedStatement 对象。
为了纠正该问题,代码修改为:
<code class="java">sInserim.executeUpdate();</code>
通过使用不带 SQL 字符串参数的executeUpdate(),自动使用PreparedStatement 的值,解决 MySQLSyntaxError 异常。
注意:
虽然与所述问题没有直接关系,但建议在finally块中关闭PreparedStatement(以及任何其他资源,例如Connection、Statement和ResultSet)以防止出现异常时资源泄漏。
以上是尽管使用了PreparedStatement,为什么我的Java代码仍会出现MySQLSyntaxError异常?的详细内容。更多信息请关注PHP中文网其他相关文章!