Не могу получить, если заявление в файле JSP - PullRequest
0 голосов
/ 02 июня 2018

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

javax.servlet.ServletException: java.sql.SQLException: перед запуском набора результатов

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++;
}

Ответы [ 2 ]

0 голосов
/ 04 июня 2018

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

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

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;
}
0 голосов
/ 02 июня 2018

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

javax.servlet.ServletException: java.sql.SQLException: перед началом набора результатов

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

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

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

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

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...