为什么我的查询结果返回false

时间:2015-12-04 10:21:26

标签: java sql

我是java和sql查询的新手,对于用户连接,我连接到数据库并检查登录是否存在。这是我的工作:

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));时,会打印登录信息。

3 个答案:

答案 0 :(得分:5)

jeuResultats.next();将结果移至下一行。从第0行开始,即当你调用.next()时它会读取第一行,然后当你再次调用它时,它会尝试读取不存在的第2行。

一些其他提示,与问题没有直接关系:

  1. Java Docs是一个开始Java 8 ResultSet的好地方,对于e.x.,或许ResultSet.first()方法可能更适合您的使用。
  2. 由于您正在使用资源,请查看try-with-resources语法。 Official tutorials是一个很好的起点。
  3. 另请参阅准备好的声明vs Statement。同样,official guide是一个开始的好地方

答案 1 :(得分:1)

在您的代码中进行以下更改。目前,next()方法正在移动结果列表以获取第一个索引处的数据,而数据位于第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);
}

答案 2 :(得分:0)

使用以下代码替换您的代码:

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();
}