After end of result set
最近老师布置了一个作业,其中有一个JSP登录,如果是管理员登录,就查看所有用户的信息。
本来觉得挺简单的任务,我实现的时候就一直报错"After end of result set“
为此我搜了两天半,该改的都改了,愣是没解决问题。
最后我还是从决定再检查一遍我的代码,再不行也许是版本问题什么的?
//我这里只写主要部分:
Class.forName("com.mysql.cj.jdbc.Driver");
Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/mybatis?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&serverTimezone=Asia/Shanghai&useSSL=false", "root", "123456");
Statement statement = connection.createStatement();
ResultSet resultSet = statement.executeQuery("SELECT * FROM user WHERE username='" + username + "' AND password='" + password + "'" + " AND deleted=1");
//记录是否查询到了数据
if (!resultSet.next()) {
out.print("登录失败");
} else {
try {
out.print("你是管理员,以下是所有用户的信息:<br>");
//新的sql语句,查询全部.
//注意:这次使用preparedStatement的方法不同
ResultSet resultSet2 = statement.executeQuery("select * from user");
//查询全部也可用(一开始我写错了逻辑,不小心在while后面加了一个分号,好在单独检查代码的时候看到了)
while (resultSet2.next()) ;{
//输出语句
}
resultSet2.close();
} catch (Exception e) {
out.print(e.getMessage());
e.printStackTrace();
}
}
statement.close();
connection.close();
} catch (Exception e) {
out.print(e.getMessage());
e.printStackTrace();
}
发现问题
在我的反复查看下终于发现了这行代码:
while (resultSet2.next()) ;{//输出语句}
没错,我在while()循环后面加了一个分号,这意味着resuleSet2这个结果集将跳转到空指针之后才开始执行接下来的语句,后面的语句都是取出resuleSet2的值的,此时指针为空,当然报错:"After end of result set“.
总结
哦,搞了半天原来是逻辑错了,一开始我还以为,一个statement只能使用一次,查了半天。
所以说啊兄弟们,写代码也要细心细心再细心啊,出了问题首先一字一句的看看自己的代码和报错再去网上查相关的问题。