插入db时,Prepared语句中出现语法错误

时间:2012-07-26 17:53:07

标签: java

您好我正在尝试使用预准备语句将数据插入数据库,但我得到语法错误,请你帮忙

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

3 个答案:

答案 0 :(得分:5)

我找到了答案:)

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

答案 1 :(得分:2)

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

String insertQuery = "INSERT INTO users"
+  " (last_name, first_name, email, password, confirm_password, phone)"
+  " VALUES(?,?,?,?,?,?)";

这样,您的insert语句不再依赖于users表中列的顺序,也不受表中列添加的影响。

请注意,尽管这种设计对于玩具或教育系统来说可能是好的,但在真实的生产系统中,将密码存储在表格中是非常危险的。存储confirm_password也很不寻常:通常您的系统会检查password是否与confirm_password相同,然后在表中插入盐渍密码哈希和盐。

答案 2 :(得分:0)

只是一个猜测,不是我不确定。但如果其中一个字段是自动增量,那么我认为你不需要插入它。尝试取出那个NULL ......