首页 > 解决方案 > 在 JavaFX 中验证数据库中已存在的值

问题描述

当我使用 memberId 注册成员时,如何检查用户 id 是否已存在于成员表中?我已经尝试过以下方法。主键是 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();
    }

}

它会针对重复条目和新条目引发已经存在的警报。

标签: javasqljavafx

解决方案


您正在将 aString与一个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


请注意,实际上最好立即尝试插入查询 catch a SQLIntegrityConstraintViolationException,假设这是表的唯一约束。否则,您可能需要检查有问题的错误,因为错误消息取决于所使用的数据库。


推荐阅读