Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java .MySQL在JDBC准备的语句中抛出错误?_Java_Mysql_Sql_Jdbc - Fatal编程技术网

Java .MySQL在JDBC准备的语句中抛出错误?

Java .MySQL在JDBC准备的语句中抛出错误?,java,mysql,sql,jdbc,Java,Mysql,Sql,Jdbc,我有一个数据库和一个Java程序,我想从中(通过JavaFX中的GUI)将记录到数据库中。我多次尝试执行插入到查询中,但错误仍然出现-您的SQL语法有错误;检查与MySQL服务器版本对应的手册,以了解第1行中“?,?,?)”附近使用的正确语法。代码如下: Class.forName("com.mysql.jdbc.Driver"); Connection conn = DriverManager.getConnection("*The connection string is del

我有一个数据库和一个Java程序,我想从中(通过JavaFX中的GUI)将记录到数据库中。我多次尝试执行
插入到
查询中,但错误仍然出现-您的SQL语法有错误;检查与MySQL服务器版本对应的手册,以了解第1行中“?,?,?)”附近使用的正确语法。代码如下:

  Class.forName("com.mysql.jdbc.Driver");
    Connection conn = DriverManager.getConnection("*The connection string is deliberetely omitted*");
    System.out.println("Connection established");
    String query  = "INSERT INTO User(Name,Username,PassWord) VALUES(?,?,?)";
    PreparedStatement insertUser = conn.prepareStatement(query);
    insertUser.setString(1,MOLCreate.fieldUsername);
    insertUser.setString(2,MOLCreate.fieldUsername);
    insertUser.setString(3,MOLCreate.fieldPassword);
    //insertUser = conn.prepareStatement(query);
    insertUser.executeUpdate(query);
    conn.close();
我已经用相应的值替换了参数
,而且数据库行与查询中的行相同。哪里有问题?

这里的关键是错误
您的SQL语法有错误;查看与您的MySQL服务器版本对应的手册,了解在“?,?,?)”附近使用的正确语法。

这意味着对mysql的实际查询包含
,而不是预期的字符串

问题在于
insertUser.executeUpdate(查询)

query
作为参数传递到
executeUpdate()
执行原始查询字符串。根据javadocs,不应该为PreparedStatement调用此方法。执行PreparedStatement的正确方法是使用

insertUser.executeUpdate();
参考:

另外,您的PreparedStatement需要关闭,因为它们可能会导致内存泄漏。

让我们试试看-

        Class.forName("com.mysql.jdbc.Driver");
        Connection conn = DriverManager.getConnection("*The connection string is 
        deliberetely omitted*");

        **conn.setAutoCommit(false);**//Auto commit false
        System.out.println("Connection established");
        String query  = "INSERT INTO User(Name,Username,PassWord) VALUES(?,?,?)";
        PreparedStatement insertUser = conn.prepareStatement(query);
        insertUser.setString(1,MOLCreate.fieldUsername);
        insertUser.setString(2,MOLCreate.fieldUsername);
        insertUser.setString(3,MOLCreate.fieldPassword);
        //insertUser = conn.prepareStatement(query);
        int check=insertUser.executeUpdate(query);
        System.out.println("Check the data  inserted or not ::" + check);
        **conn.commit(); /**/
        conn.close();**strong text**

错误是什么?顺便说一句,它应该是
execute(query)
而不是
executeUpdate(query)
forinsert@user404你错了
executeUpdate
是正确的方法,OP只是使用了错误的变量(他们应该使用不带参数的
executeUpdate
)@MarkrotVeel,我的错:(!我同意你的看法。这仍然会产生相同的错误:
insertUser.executeUpdate(query)
而不是
insertUser.executeUpdate()