首页  >  文章  >  数据库  >  尽管使用了PreparedStatement,为什么我的Java代码仍会出现MySQLSyntaxError异常?

尽管使用了PreparedStatement,为什么我的Java代码仍会出现MySQLSyntaxError异常?

Susan Sarandon
Susan Sarandon原创
2024-10-31 00:35:30255浏览

Why Does My Java Code Get a MySQLSyntaxError Exception Despite Using a PreparedStatement?

尽管语句正确,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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn