Просто используйте то, flag
что вы использовали, чтобы определить, существует ли запись:
if(!flag) {
//put here the insert statement
}
public void registration() throws ClassNotFoundException, SQLException {
System.out.println("Do you want to register to pay advance in online type yes or no");
boolean flag = false;
Set <String> pNumber = new HashSet <String>();
String input = scan.next();
if (input.equalsIgnoreCase("Yes")) {
System.out.println("Enter your name");
String name = scan.next();
System.out.println("Enter password");
String pWord = scan.next();
System.out.println("Re-enter password");
String reEnter = scan.next();
if (pWord.equals(reEnter)) {
String confirm = reEnter;
System.out.println("Your password created successfully");
System.out.println("Enter your phone number");
String phoneNumber = scan.next();
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
conn = MansionDBConnect.getConnection();
String queryTwo = "select phone_number from registration";
ps = conn.prepareStatement(queryTwo);
rs = ps.executeQuery();
while (rs.next()) {
pNumber.add(rs.getString(1));
//System.out.println(rs.getString(1));
}
System.out.println(pNumber.size());
for (int i = 0; i < pNumber.size(); i++) {
if (pNumber.contains(phoneNumber)) {
System.out.println("Already number registered");
//pNumber.remove(phoneNumber);
System.out.println(pNumber);
flag = true;
break;
}
}
if (pNumber.equals(phoneNumber)) {
System.out.println("Already number registered");
}
String query = "insert into registration (username,password,phone_number)values(?,?,?)";
ps = conn.prepareStatement(query);
ps.setString(1, name);
ps.setString(2, confirm);
ps.setString(3, phoneNumber);
ps.executeUpdate();
System.out.println("Your record created successfully try login");
} else {
System.out.println("password mismatch found try again");
}
} else {
System.out.println("For more details please call us");
}
}
Я пытаюсь игнорировать пользователя, registration()
если пользователь с тем же номером мобильного телефона уже существует. Я могу найти, существует ли он, но после этого остальная часть кода должна быть выполнена. Но query
продолжает выполняться. Какое условие необходимо добавить?
Лучшим подходом здесь, вероятно, является добавление индекса phone_number в registration
столбец в вашей таблице:ALTER TABLE registration ADD UNIQUE (phone_number);
try {
String query = "insert into registration (username, password, phone_number) values(?,?,?)";
ps = conn.prepareStatement(query);
ps.setString(1, name);
ps.setString(2, confirm);
ps.setString(3, phoneNumber);
ps.executeUpdate();
}
catch (SQLIntegrityConstraintViolationException e) {
System.out.println("Already number registered");
}
При наличии уникального индекса вставки с использованием дублированного номера телефона должны вызывать исключение, которое вы можете поймать и обработать:
UNIQUE
Во-первых, я бы сказал, что вы должны убедиться, что добавили UNIQUE
в свой номер телефона в своей базе данных MySql:
ALTER TABLE registration ADD UNIQUE (phone_number);
Также замените эту строку:
String queryTwo = "select phone_number from registration";
в
String queryTwo = "select phone_number from registration where phone_number = '" + phoneNumber + "'";
выполните проверку, если какая-либо строка будет возвращена.
Удачи.