Есть цикл, который перебирает строки в БД и сравнивает их с веденной строкой.
Если строка повторяется, то пишет "Email занят". Иначе строка вносится в БД.
Есть проблема, если ввести сначала почту, которая уже есть в БД, а потом новую, то запрос первой будет дублироваться, после выполнения второй.
private static String checkemail(Connection emailconnect) {
String query = "SELECT COUNT(*) FROM testdatabase.signup;";// Задаем параметр запроса - количество строк
String email = null;// Задаем переменную email, которая будет возвращена в случаи, если он уникален
try {
email = Signup.reademail(email);// считываем с клавиатуры email
Statement statement = emailconnect.createStatement();//создал статемент
ResultSet resultSet = statement.executeQuery(query);//сделал запрос, ответ записал в переменную
int id = 0;
while (resultSet.next()){
id = resultSet.getInt(1); // считываю по стокам и перевожу количество строк в ID
}
int x = 0;// нумерация запроса
int y = 1;// нумерация строки
while (x < id){
String emailid = "SELECT * FROM testdatabase.signup where id = " + y + ";";// строка запроса
Statement statementemail = emailconnect.createStatement();//создание статемента
ResultSet resultSetemail = statementemail.executeQuery(emailid);//получение результатов
resultSetemail.next();// хз зачем эта строка, но без нее не работает (я знаю, что это для того чтоб читать построчно)
String emailres = resultSetemail.getString(2);//записываем результат в строку
System.out.println("Это строка " + email);
System.out.println("Это результат с БД " + y + " " + emailres);
if(email.equals(emailres)){ //сравниваем результат из БД и результат введенный с клавиатуры
System.out.println("E-mail занят");
Signup.checkemail(emailconnect);// если повторяется вызываем метод снова
}
x = x + 1;
y = y + 1;
}
} catch (SQLException e) {
e.printStackTrace();
}
return email;// иначе возвращаем значение email
}
private static String reademail(String email) {
System.out.println("Введите E-mail:");//Объявил
Scanner scanneremail = new Scanner(System.in);//метод
email = scanneremail.nextLine();//scanner() для считывания строки
return email;//вернул его значение
Вот результат, когда вводишь сначала уже имеющийся email, потом новый email.
Соединение с БД установлено!
Введите E-mail:
18ko@mail.ru
Это строка 18ko@mail.ru
Это результат с БД
1 18ko@mail.ru
E-mail занят
Введите E-mail:
45ff@mail.ru
Это строка 45ff@mail.ru
Это результат с БД
1 18ko@mail.ru
Это строка 45ff@mail.ru
Это результат с БД
2 19lp@mail.ru
Это строка 45ff@mail.ru
Это результат с БД
3 20ji@mail.ru
Это строка 45ff@mail.ru
Это результат с БД
4 18ko@mail.ru
Это строка 18ko@mail.ru
Это результат с БД
2 19lp@mail.ru
Это строка 18ko@mail.ru
Это результат с БД
3 20ji@mail.ru
Это строка 18ko@mail.ru
Это результат с БД
4 18ko@mail.ru
E-mail занят
Введите E-mail:
То есть запрос к БД идет так:
Читает первую строку 1, нашел совпадение. Пишет что email занят и просит ввести новый. Вводим новый e mail.
Запросы:
1
2
3
4
Возвращается к старому запросу.
2
3
4
Как лечить?