您好我正在尝试使用预准备语句将数据插入数据库,但我得到语法错误,请你帮忙
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
答案 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 ......