Не могу войти в оператор if в файле jsp

Я разрабатываю страницу входа, где участники выполняют вход и регистрацию. У меня возникают проблемы, когда я сравниваю имя пользователя и пароль с данными пользователя в таблице базы данных. Этот фрагмент кода вызывает это исключение, но я не могу понять, что происходит не так. сервер выдает это сообщение:

javax.servlet.ServletException: java.sql.SQLException: Before start of result set

String search_in  = "select USERNAME,PASSWORD from USERS";
ResultSet search_result= myStatement.executeQuery( search_in );



while( search_result.next() ){
a[i] = search_result.getString("USERNAME");
b[i] = search_result.getString("PASSWORD");


//new_username and  new_password are form input parameters
if ( a[i].equals(new_username) && b[i].equals(new_password) ){
    out.println("in if statement<br>");
    found = true;
    break;
    }
i++;
}

Опишите также свою таблицу БД

Yati Sawhney 02.06.2018 13:17

опубликовать полный стек исключений

Eby Jacob 02.06.2018 13:38
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
2
79
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Сообщение об ошибке достаточно для устранения основной причины .. !!

javax.servlet.ServletException: java.sql.SQLException: Before start of result set

Это происходит, если мы пытаемся получить доступ к строке, которая не индексируется нашим курсором resultSet. Это что???

Когда мы запускаем запрос select, в результате мы можем получить несколько строк или одну строку или вообще ни одной строки (результат зависит от вашего запроса и данных).

Эти строки сохраняются в экземпляре resultSet.

Чтобы получить доступ к этим строкам, мы можем перебрать их в цикле с помощью resultSet.next() (или любыми другими способами ..). Поскольку вы использовали цикл while с функцией .next(), я рассматриваю то же самое.

Таким образом, эта функция next() фактически перемещает курсор в следующую строку, и первоначально она указывает на один индекс перед фактической строкой результата, то есть индексирует значение -1, поэтому, как только мы попадаем в цикл while, функция resultSet.next() перемещает курсор в на одну позицию вперед, т.е. впервые он будет указывать на фактическую строку в позиции 0 и так далее, пока не останется ничего для итерации.

Ошибка, о которой вы упомянули, связана с тем, что курсор изначально указывает на -1, и когда он пытается выполнить итерацию (т.е. перейти к действительно первой строке), он терпит неудачу, потому что из этого запроса не возвращается ни одна строка, и, следовательно, ошибка говорит before the start of ResultSet.

Я надеюсь, что это проясняет ваше представление о resultSet и дает представление о том, что происходит за кулисами.

Итак, предложение для вашей проблемы: попробуйте проверить / изменить свой запрос или посмотреть в базе данных, действительно ли он содержит какую-либо такую ​​строку, которая должна быть возвращена по этому запросу или нет.

Если я понимаю, вы имеете в виду, что, возможно, у запроса или базы данных есть проблема? Но если вы напечатаете a [i] и b [i], он вернет мне данные, когда я вставлю их в таблицу

pacos 02.06.2018 18:38

Хорошо..!! Значит, вы получаете значения a[i] и b[i] в том же блоке кода, который вы разместили, или на другой странице ?? Я имею в виду, как вы узнали его ценности ??

miiiii 02.06.2018 19:56

И я просто догадываюсь .., вы пытаетесь проверить логин пользователя с помощью вышеуказанного подхода ??

miiiii 02.06.2018 19:58

получить значения a [i] и b [i] внутри цикла while, потому что я напечатал для проверки, но когда я сравниваю со значениями формы в операторе if, он ничего не делает

pacos 03.06.2018 11:14

у меня есть 2 записи только для тестирования параметров, которые я вставляю в форму, являются первой записью

pacos 03.06.2018 23:45

Вы уверены, что new_username и new_password точно совпадают хотя бы с одной записью, я имею в виду, интервал и регистр тоже .. !!

miiiii 04.06.2018 10:44

Также см. Мой новый ответ, я сохранил старый, поскольку он предназначен для тех, кому нужно понять основную причину вышеуказанной ошибки. !!

miiiii 04.06.2018 10:53

Вместо того, чтобы извлекать все записи из базы данных и сравнивать значения в вашем код приложения, я бы посоветовал вам попросить базу данных предоставить вам записи в соответствии с вашими условиями.

Для этого измените свой запрос и код, как показано ниже.

String search_in  = "select USERNAME,PASSWORD from USERS where USERNAME = ? AND PASSWORD = ?";
myStatement.setString(1, new_username); // assuming your column is varchar or text
myStatement.setString(2, new_password); // assuming your column is varchar or text
ResultSet search_result= myStatement.executeQuery( search_in );

if ( search_result.next() ){
   out.println("in if statement<br>");
    found = true;
}

Я нашел это. Проблема была не в проверке записей данных, а в другом выражении if, которое было после found == true. Спасибо за вашу помощь!

pacos 04.06.2018 14:59

подумайте, пожалуйста, о голосовании .. !!

miiiii 04.06.2018 15:11

Другие вопросы по теме