我是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));
时,会打印登录信息。
答案 0 :(得分:5)
jeuResultats.next();
将结果移至下一行。从第0行开始,即当你调用.next()
时它会读取第一行,然后当你再次调用它时,它会尝试读取不存在的第2行。
一些其他提示,与问题没有直接关系:
ResultSet.first()
方法可能更适合您的使用。答案 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();
}