Сообщение об ошибке достаточно для основной причины .. !!
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
и даст вам представление о том, что происходит за кулисами.
Итак, предложите свою проблему, попробуйте проверить / изменить запрос или посмотретьв базе данных, если она действительно содержит какую-либо такую строку, которая должна быть возвращена в этом запросе или нет.