。MySQL在JDBC Prepared语句中引发错误?

问题描述 投票:1回答:1

我有一个数据库和一个Java程序,要从中(通过JavaFX中的GUI)在数据库中进行记录。我多次尝试执行insert into查询,但错误继续出现-您的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();

我已用相应的值替换了参数?,数据库行也与查询中的行相同。问题可能出在哪里?

java mysql sql jdbc
1个回答
0
投票

关键是错误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 '?,?,?)'

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

问题出在insertUser.executeUpdate(query);

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

insertUser.executeUpdate();

参考:

https://docs.oracle.com/javase/7/docs/api/java/sql/Statement.html#executeUpdate(java.lang.String)

https://docs.oracle.com/javase/7/docs/api/java/sql/PreparedStatement.html#executeUpdate()

此外,您的PreparedStatement也需要关闭,因为这可能会导致内存泄漏。


0
投票

让我们尝试-

        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**
© www.soinside.com 2019 - 2024. All rights reserved.