验证JavaFX中数据库中已经存在的值

问题描述 投票:-1回答:1

当我使用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();
    }

}

它为重复项和新项都引发了已经存在的警报。

java sql javafx
1个回答
3
投票

您正在将StringInteger对象进行比较。这总是产生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实际上可能更好。否则,您可能需要检查有问题的错误,因为错误消息取决于所使用的数据库。

© www.soinside.com 2019 - 2024. All rights reserved.