Java 插入数据库时,准备语句中出现语法错误

Java 插入数据库时,准备语句中出现语法错误,java,Java,您好,我正在尝试使用prepared语句将数据插入数据库,但我遇到语法错误,请您提供帮助 public boolean SignUp(String last_name, String first_name,String email, String password,String confirm_password,String phone){ Connect connect = new Connect(); Connection conn = connect.

您好,我正在尝试使用prepared语句将数据插入数据库,但我遇到语法错误,请您提供帮助

public boolean SignUp(String last_name, String first_name,String email, String password,String confirm_password,String phone){



        Connect connect = new Connect();
        Connection conn = connect.Connection();

        java.sql.PreparedStatement preparedStatement = null;
        //NULL is the column for auto increment
        String insertQuery = "INSERT INTO users VALUES (NULL, ?, ?, ?, ?, ?, ?)";
        preparedStatement = conn.prepareStatement(insertQuery);
        preparedStatement.setString(1, last_name);
        preparedStatement.setString(2, first_name);
        preparedStatement.setString(3, email);
        preparedStatement.setString(4, password);
        preparedStatement.setString(5, confirm_password);
        preparedStatement.setString(6, phone);

        int rs = preparedStatement.executeUpdate(insertQuery);

        conn.close();
}

这是错误消息

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

您应该更改语句以显式列出列,并从值列表中删除
NULL

String insertQuery = "INSERT INTO users"
+  " (last_name, first_name, email, password, confirm_password, phone)"
+  " VALUES(?,?,?,?,?,?)";
这样,insert语句就不再依赖于
users
表中列的顺序,也不受向表中添加列的影响


请注意,虽然这种设计可能适合玩具或教育系统,但在实际生产系统中,将密码存储在表中是非常危险的。存储
confirm\u password
也很不寻常:通常您的系统会检查
password
是否与
confirm\u password
相同,然后在表中插入一个salt密码哈希和salt。

只是猜测,不是我不确定。但是如果其中一个字段是autoincrement,那么我认为不需要插入它。试着去掉空值…

我找到了答案:)


使用preparedStatement.execute()而不是executeUpdate(sql)。您已经设置了sql和参数-executeUpdate(sql)中的新设置将覆盖绑定。

您在准备的语句中有6个参数,但只有5个参数集,是吗?您有5个
标记,您只设置了5个参数。您确定在表中输入了正确的数据类型吗?你确定这是正确的参数数量吗?我之前没有发布过——我已经编辑过了that@dasblinkenlight-同样的错误仍然存在,但是下面的错误适用于
String insertquery=“插入到详细信息值中(NULL,(“+”姓氏+“),(“+”姓氏+“),(“+”电子邮件+“),(“+”密码+“),(“”+确认密码+”),(“+phone+”)”
@srikan他们正在插入不同的表(
详细信息
用户
)。这是故意的吗?我讨厌用这种方式硬编码,因为prepared语句给出了一个错误。@Srikanth这很奇怪,它应该可以工作。尝试重新键入
值(?,,,,,,,,?)
部分,以确保
和','字符是正确的ASCII字符,而不是与其他编码中的等效字符相似。