java - .MySQL 在 JDBC 准备语句中抛出错误?

标签 java mysql sql jdbc

<分区>

我有一个数据库和一个 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();

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

最佳答案

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

这意味着对您的 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 需要关闭,因为它们可能会导致内存泄漏。

关于java - .MySQL 在 JDBC 准备语句中抛出错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59496670/

相关文章:

mysql - 使用内连接 2 查询结果不准确

PHP 配置文件更新错误 mysql_num_rows

sql - 在一个查询中对多个表进行多个左连接

sql - 在 INNER JOIN 条件下有一个 'OR' 是个坏主意吗?

SQL 格式化标准

java - 使用对话框编辑 RecyclerView 列表项

java - Thymeleaf + Spring 下拉菜单在选定的下拉框中保留数据

php - 在 php - mysql 中嵌套 "group by"和 "for (each)"语句

java - 为什么在设置之前调用构造函数方法

java - 使用类 Calendar 进行调试时的不同结果