提交运行之后会提示我 ResultSet is closed,请问这是什么原因???

小小鱼儿儿 2016-02-11 06:48:10
问题描述:HTTP Status 500 - org.apache.jasper.JasperException:
javax.servlet.ServletException: java.sql.SQLException: java.sql.SQLException: ResultSet is closed

代码如下(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"%><html>
<%
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();
}
}
%>








...全文
246 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
小小鱼儿儿 2016-02-12
  • 打赏
  • 举报
回复
但是我在另一个页面要用到它啊,必须要用到的。我应该从哪里改?
小小鱼儿儿 2016-02-12
  • 打赏
  • 举报
回复
不行呀,还是错的。我觉得应该是页面访问session中的数据方式有问题。因为我尝试不在另一个页面去访问Username,就没错误了。
孟子E章 2016-02-12
  • 打赏
  • 举报
回复
stat.close(); rs.close(); 改成 rs.close(); stat.close();
小小鱼儿儿 2016-02-12
  • 打赏
  • 举报
回复
请问应该怎么改?
枯心人 2016-02-12
  • 打赏
  • 举报
回复
结果集已经关闭,
毕小宝 2016-02-12
  • 打赏
  • 举报
回复
第一个问题,ResultSet已经关闭的异常是因为你关闭ResultSet和Statement语句的顺序反了,应该先关闭ResultSet,后关闭Statement的。java中Connection,Statement,ResultSet的关闭顺序是从后往前的。 第二个问题,你的错误信息是什么呢?看代码没有问题,要不然就是你页面访问session中的数据方式有问题。

87,902

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧