尝试执行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));