2015-12-04 4 views
2

Я новичок в Java и sql-запросе, а для подключения пользователя я подключаюсь к БД и проверяю, существует ли логин. Вот что я делаю:Почему мой результат запроса возвращает меня false

requete = "SELECT Login,Password,DroitModifAnnuaire,DroitRecepteurDem,DroitResponsableDem,PiloteIso,Administrateur,DroitNews,DroitTenues,DroitEssai,Nom,Prenom FROM Annuaire WHERE Login='" 
      + (request.getParameter("login") + "'"); 
instruction = connexion.createStatement(); 
jeuResultats = instruction.executeQuery(requete); 
try{    
    jeuResultats.next(); 
} catch (SQLException e) { 
    e.printStackTrace(); 
} 
if (jeuResultats.next() == false) { 
    loadJSP("/index.jsp", request, reponse); 
}else { 
    loadJSP("/views/menu.jsp", request, reponse); 
} 

Логин, который я ввожу это хорошо, но он перенаправляет меня index.jsp и у меня есть ошибка: the result set has no current row

Я пытался найти ответ на эту ошибку, но я не сделал найденный. Так почему он возвращает меня false? Хотя когда я делаю System.out.println(jeuResultats.getString(1));, вход распечатан.

+4

вы звоните рядом дважды. потому что вы проверяете «if (jeuResultats.next() == false)», если есть вторая строка –

+0

@ Симо О да, спасибо, теперь это работает –

+2

Я хочу войти в систему с 'TT '; DROP TABLE Annuaire; - ' –

ответ

5

jeuResultats.next(); переносит ваш результат в следующую строку. Вы начинаете с 0-й строки, т. Е. Когда вы вызываете .next(), она читает первую строку, а затем, когда вы вызываете ее снова, она пытается прочитать вторую строку, которая не существует.

Некоторые дополнительные подсказки, непосредственно не связанные с вопросом:

  1. Java Docs являются хорошим местом для начала Java 8 ResultSet для e.x., возможно ResultSet.first() метод может быть более подходящим для использования.
  2. Поскольку вы работаете с ресурсами, взгляните на синтаксис try-with-resources. Official tutorials - хорошая отправная точка для этого.
  3. Также взгляните на подготовленный оператор vs Statement. Опять же, official guide - это хорошее место для начала
1

Сделайте следующие изменения в своём коде. В настоящее время метод следующий() смещается список результатов для выборки данных на 1-й индекс, в то время как данные на 0-й индекс:

boolean result = false; 
try{    
    result = jeuResultats.next(); 
} catch (SQLException e) { 
    e.printStackTrace(); 
} 
if (!result) { 
    loadJSP("/index.jsp", request, reponse); 
}else { 
    loadJSP("/views/menu.jsp", request, reponse); 
} 
0

Replace ваш код, приведенный ниже код:

requete = "SELECT Login, Password, DroitModifAnnuaire, DroitRecepteurDem, DroitResponsableDem, PiloteIso, Administrateur, DroitNews, DroitTenues, DroitEssai, Nom, Prenom FROM Annuaire WHERE Login = '" 
      + (request.getParameter("login") + "'"); 
instruction = connexion.createStatement(); 
jeuResultats = instruction.executeQuery(requete); 

try{    
    if (jeuResultats.next()) { 
     loadJSP("/index.jsp", request, reponse); 
    } else { 
     loadJSP("/views/menu.jsp", request, reponse); 
    } 
} catch (SQLException e) { 
    e.printStackTrace(); 
} 
Смежные вопросы