当我使用memberId注册成员时,如何检查成员表中是否已经存在用户标识?我尝试了以下方法。主键是MemberID
MemberDbController.java
public static boolean checkMemberID(int memberId){
boolean memberIdExists = false;
Connection conn=DBConnection.getDBConnection().getConnection();
Statement stm = conn.createStatement();
ResultSet rst = stm.executeQuery("SELECT * FROM members WHERE memberId='"+memberId+"'");
String id;
if (rst.next()){
id = rst.getString("memberId");
if(id.equals(memberId)){
memberIdExists = true;
}
}
return memberIdExists;
}
MemberUiController.java
@FXML
void addMember(ActionEvent event) {
//Getting Value from User Input
int memberId = Integer.parseInt(memberIdField.getText());
String name = nameField.getText();
String doa = doaField.getText();
RadioButton selectedRadioButton = (RadioButton)
Gender.getSelectedToggle(); //Getting Selected Radio Button
String gender = selectedRadioButton.getText();
String email = emailField.getText();
String phone = phoneField.getText();
try {
if(MemberDbController.checkMemberID(memberId)){
Member member = new Member(memberId,name,doa,gender,email,phone);
int i = MemberDbController.AddMember(member);
if (i > 0) {
//Insert Success Alert
}
else{
//Insert Failed Alert
}
}else{
//Member ID Already Exists Alert..!
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
}
它为重复项和新项都引发了已经存在的警报。
您正在将String
与Integer
对象进行比较。这总是产生false
:
public static boolean checkMemberID(int memberId) ... {
int memberId
...
String id;
...
if(id.equals(memberId)){
编译版本id.equals(memberId)
与id.equals(Integer.valueOf(memberId))
相同>
无论如何都不需要检查列的值,因为您的WHERE
子句不会在此列中接受具有不同值的行。 (与字符串文字相比,这在我看来很奇怪。您确定列的类型是文本类型吗?)
以下内容应足够:
public static boolean checkMemberID(int memberId) throws SQLException, ClassNotFoundException { Connection conn=DBConnection.getDBConnection().getConnection(); Statement stm = conn.createStatement(); ResultSet rst = stm.executeQuery("SELECT * FROM members WHERE memberId='"+memberId+"'"); return rst.next(); }
此外,在
addMember
中,如果值不存在,而是当前值,则将结果视为返回true
。请注意,假设这是表中唯一的约束,尝试立即插入查询来捕获
SQLIntegrityConstraintViolationException
实际上可能更好。否则,您可能需要检查有问题的错误,因为错误消息取决于所使用的数据库。