尝试执行PreparedStatement时重复MySQLSyntaxErrorException

我尝试使用JDBC使用以下方法使用PreparedStatement插入userId(int)和userName(String):

public boolean saveUser(int userId, String userName){ boolean saveStatus = false; try { connection.setAutoCommit(true); String sql = "insert into testtable values(?,?)"; PreparedStatement statement = connection.prepareStatement(sql); statement.setInt(1, userId); statement.setString(2, userName); saveStatus = statement.execute(sql); } catch (SQLException e) { e.printStackTrace(); }finally{ Connector.closeConnections(); } return saveStatus; } 

我得到以下stacktrace:

 com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: 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 '?,?)' at line 1 

我究竟做错了什么?

试试这个应该工作:

  try { connection.setAutoCommit(true); String sql = "insert into testtable values(?,?)"; PreparedStatement statement = connection.prepareStatement(sql); statement.setInt(1, userId); statement.setString(2, userName); saveStatus = statement.execute(); } catch (SQLException e) { e.printStackTrace(); } return saveStatus; } 

PreparedStatement是预编译语句。 执行时不必提供sql字符串。

您的代码中存在根本性错误。

创建PreparedStatement ,我们需要调用preparedStatement.executeUpdate(); 没有再次传递SQL

以下是您的问题的完整代码。

 import java.sql.Connection; import java.sql.Driver; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.SQLException; public class SampleMysql { public static Connection getConnection() throws SQLException { Driver drv = new com.mysql.jdbc.Driver(); DriverManager.registerDriver(drv); Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/sample","sample", "sample"); return con; } public static int saveUser(int userId, String userName){ int saveStatus = 0; Connection connection = null; try { connection = getConnection(); connection.setAutoCommit(true); String sql = "INSERT INTO testtable VALUES(?,?)"; PreparedStatement preparedStatement = connection.prepareStatement(sql); preparedStatement.setInt(1, userId); preparedStatement.setString(2, userName); saveStatus = preparedStatement.executeUpdate(); } catch (SQLException e) { e.printStackTrace(); }finally{ if (connection != null) { try { connection.close(); } catch (SQLException e) { e.printStackTrace(); } } } return saveStatus; } public static void main(String[] a) { System.out.println(saveUser(1, "sample")); } } 

表脚本如下。

 CREATE TABLE testtable(user_ID INT(10), user_name VARCHAR(10));