.MySQL 在 JDBC Prepare 语句中抛出错误?



我有一个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();

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

这里的关键是错误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 需要关闭,因为它们可能会导致内存泄漏。

让我们试试 -

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**

相关内容

最新更新