Вы игнорируете результат ResultSet#next()
, прежде чем пытаетесь получить доступ к столбцам строки. ResultSet#next()
возвращает true
, если есть строка, в противном случае false
. Если вы попытаетесь получить доступ к несуществующей строке, вы получите исключение такого рода.
Итак, измените следующие две строки
rsvp.next();
info = rsvp.getString(2);
следующим образом:
if (rsvp.next()) {
info = rsvp.getString(2);
}
Таким образом, код больше не будет пытаться получить доступ к несуществующей строке. Следующий вопрос, вероятно, будет таким: «почему он не вернул строку»? Ответ будет: «либо SQL-запрос неверен, либо строка фактически отсутствует в БД». Эта проблема лежит за пределами Java / JSP / JDBC. Отладьте запрос SQL (запустите отладчик или просто выполните System.out.println()
) и скопируйте его без изменений в инструмент администратора БД и проверьте / выполните его. Могу поспорить, что эти лишние обратные слеши являются основной причиной проблемы, или что schoolname
содержит символ, который необходимо экранировать.
Тем не менее, этот код не принадлежит файлу JSP. Он принадлежит к настоящему классу Java. Запустите изучение сервлетов , пока не стало слишком поздно. Также я хотел бы изучить JDBC еще раз на основе учебника Sun , ваш код JDBC именно утечка ресурсов. Вам необходимо освободить (закрыть) их после использования в блоке finally
блока try
по мере их приобретения. Также я бы использовал PreparedStatement
вместо Statement
, чтобы сохранить ваш код от SQL-инъекций . Вышеупомянутый учебник Sun также охватывает это.