开发者社区> 问答> 正文

运行后错误为ResultSet is closed,求助

问题描述:HTTP Status 500 - org.apache.jasper.JasperException:
javax.servlet.ServletException: java.sql.SQLException: java.sql.SQLException:[color=#FF0000] ResultSet is closed[/color]
代码如下(userDao.java)类:
package dao;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.ResultSet;
import java.util.ArrayList;
import vo.user;
public class userDao {
//访问数据库
private Connection conn = null;
ArrayList users=new ArrayList();
user us=null;
public user queryAllUser(String username) throws Exception {
try
{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
conn = DriverManager.getConnection("jdbc:odbc:D");
String sql ="SELECT * FROM tb_Member where username='"+username+"'";
Statement stat=conn.createStatement();
ResultSet rs = stat.executeQuery(sql);
while (rs.next()) {
us = new user();
us.setUsername(rs.getString(1));
us.setPassword(rs.getString(3));
return us;
}
stat.close();
rs.close();
}catch(SQLException e){
e.printStackTrace();
}finally{
try{
if(conn!=null){
conn.close();
conn=null;
}
}catch(Exception ex){
}
}
return us;
}}
vo包里的user.java类:
package vo;
public class user {
private String username;
private String password;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
最重要的登录需要提交的jsp页面代码:
<%@ page language="java" import="java.util.*" import="java.sql.*" pageEncoding="gb2312"%>
<%@ page import="vo.user,dao.userDao"%>
<%
request.setCharacterEncoding("gb2312");
String username=request.getParameter("username");
String password=request.getParameter("PWD");
if(username!=null&&password!=null){
userDao userdao=new userDao();
user us=userdao.queryAllUser(username);
try{
if(us==null){
out.println("输入错误,该用户名不存在 ");
}else{
out.println("密码输入错误");
if(password.equals(us.getPassword())){
A句:session.setAttribute("UserName",username);(本句有错,但是我需要这一句,因为我要保存UserName,下一个页面要用的)
                //B句session.setAttribute("password",password);//若是注销A句,执行B句是可以运行的。请大家帮我看看到底怎么回事,我已经思考了好几天了也没想出来[大哭]
                response.sendRedirect("index.jsp");
            }
        }
    }catch(Exception e){
       e.printStackTrace();
    }
}
%>

展开
收起
小旋风柴进 2016-03-16 10:07:12 2573 0
1 条回答
写回答
取消 提交回答
  • while (rs.next()) {
    us = new user();
    us.setUsername(rs.getString(1));
    us.setPassword(rs.getString(3));
    return us;
    }
    stat.close();
    rs.close();
    你这样写
    stat.close();
    rs.close();

    得不到执行的机会。

    另外确认你的字段下标(从0开始算)是1和3。最好用字段名。

    session.setAttribute("password",password);没有必要在session中保存密码。

    2019-07-17 19:03:27
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载