Java .MySQL在JDBC准备的语句中抛出错误?
我有一个数据库和一个Java程序,我想从中(通过JavaFX中的GUI)将记录到数据库中。我多次尝试执行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
插入到
查询中,但错误仍然出现-您的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()