为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

鸿蒙传说 2023-02-16 15:18:02
当我使用 memberId 注册会员时,如何检查用户 id 是否已存在于 members 表中?我试过下面的方法。主键是 MemberIDMemberDbController.javapublic 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@FXMLvoid 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();    }}它会针对重复条目和新条目抛出一个已经存在的警报。
查看完整描述

1 回答

?
阿晨1998

TA贡献2037条经验 获得超6个赞

你正在比较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请注意,假设这是表的唯一约束,尝试插入查询立即捕获 a 实际上可能更好。否则您可能需要检查有问题的错误,因为错误消息取决于所使用的数据库。


查看完整回答
反对 回复 2023-02-16
  • 1 回答
  • 0 关注
  • 145 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号