首页 > 数据库 > mysql教程 > 尽管使用了有效的 INSERT 语句,为什么我的 JDBC 代码仍会抛出 MySQLSyntaxErrorException?

尽管使用了有效的 INSERT 语句,为什么我的 JDBC 代码仍会抛出 MySQLSyntaxErrorException?

Susan Sarandon
发布: 2024-10-31 07:14:01
原创
352 人浏览过

Why does my JDBC code throw a MySQLSyntaxErrorException despite using a valid INSERT statement?

JDBC 异常:带有有效 SQL 语句的 MySQLSyntaxError

在本文中,我们深入研究使用 JDBC 向数据库插入数据时遇到的问题。 MySQL 数据库。尽管在 MySQL Workbench 中执行了有效的 INSERT 语句,我们还是收到了 MySQLSyntaxError 异常。

为了调查根本原因,让我们分析代码:

<code class="java">public static boolean aggiungiElem(String nome, GrafoGenerico g){
    if(connessioneAperta()){
        try{
            String sqlCommandUser = "SELECT USER()";
            String sqlCommandInserim = "INSERT INTO salvataggi VALUES ( ? , ? , DEFAULT , NULL );";
            PreparedStatement sUser = conn.prepareStatement(sqlCommandUser);
            ... // Execute user query
            PreparedStatement sInserim = conn.prepareStatement(sqlCommandInserim);
            sInserim.setString(1, utente);
            sInserim.setString(2, nome);
            System.out.println(sInserim);
            sInserim.executeUpdate(sqlCommandInserim);
            ... // Close PreparedStatements and ResultSet
        }
        catch(SQLException e){
            e.printStackTrace();
            return false;
        }
    }
    else
        return false;
}</code>
登录后复制

检查堆栈跟踪:

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
登录后复制

此错误表明SQL语句存在语法错误。然而,我们的 INSERT 语句似乎是正确的。

经过仔细检查,我们注意到executeUpdate() 方法采用字符串参数 SQLCommandInserim 而不是PreparedStatement sInserim。这是代码中的疏忽。

解决方案:

要解决此问题,请将以下行替换:

<code class="java">sInserim.executeUpdate(sqlCommandInserim);</code>
登录后复制

替换为:

<code class="java">sInserim.executeUpdate();</code>
登录后复制

通过在PreparedStatement上调用executeUpdate(),JDBC会将占位符(?)替换为使用setString()方法设置的值,从而防止语法错误。

其他注意事项:

还建议使用finally块关闭所有数据库对象(PreparedStatements、Connections、Statements和ResultSet),以防止出现异常时资源泄漏。

以上是尽管使用了有效的 INSERT 语句,为什么我的 JDBC 代码仍会抛出 MySQLSyntaxErrorException?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板