java - 在 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();
}
}
它会针对重复条目和新条目引发已经存在的警报。
解决方案
您正在将 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
,假设这是表的唯一约束。否则,您可能需要检查有问题的错误,因为错误消息取决于所使用的数据库。
推荐阅读
- android - IntelliJ Android 项目未呈现设计布局
- javascript - React 按钮不显示链接页面
- python - 在带有滚动窗口的熊猫中随时间推移获取价值计数
- apache-spark - 关于使用 parquet 处理时间序列数据的问题
- python - 在python中删除父约束时如何将定位器保持在父项的中心
- python - 重塑图像实际上有什么作用?
- webfocus - 有谁知道我在哪里可以找到有关 WebFOCUS 的培训?
- c++ - 使用较大数组的一部分调用函数
- drupal-8 - 如何从作为对分类术语的实体引用的多选字段中获取值
- php - 跨域请求仅支持协议方案,我该怎么办?