2 qq 32274169 qq_32274169 于 2016.02.11 18:58 提问

运行后错误为ResultSet is closed,求助。已经迷茫好几天了,实在想不出来 5C

问题描述: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();
    }
}

%>

3个回答

caozhy
caozhy   Ds   Rxr 2016.02.11 21:18

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中保存密码。

qwe885167759
qwe885167759 层主说的对
2 年多之前 回复
qq_32274169
qq_32274169 request.setCharacterEncoding("gb2312");String username=request.getParameter("username");String password=request.getParameter("PWD");if(username!=null&&password!=null){userDao userdao=newuserDao();user us=userdao.queryAllUser(username);try{if(us==null){ out.println("输入错误,该用户名不存在 "); }else{ out.println("密码输入错误"); if(password.equals(us.getPassword())){ //session.setAttribute("UserName",username); //注销这句是可以运行的。可是我想要在session中保存Username,就报错:ResultSet is closed
2 年多之前 回复
qq_32274169
qq_32274169 我不想在session中保存密码的。想要保存的是Username,但是一执行就会报错:ResultSet is closed
2 年多之前 回复
qq_32274169
qq_32274169 字段下标是对的。
2 年多之前 回复
qq_16414307
qq_16414307   2016.02.13 11:34

先关闭 rs就可以了

rs.close();
stat.close();

qwe885167759
qwe885167759   2016.02.13 18:56

把rs放到finally中执行,楼主的程序语句的执行时间顺序上有点小问题

qwe885167759
qwe885167759 看错了,抱歉
2 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
db2 resultSet关闭时提示结果集已关闭异常
db2 resultSet关闭时提示结果集已关闭异常这个就是db2自己的行为特性,在所有行被取出来之后自动关闭。解决办法就是不去关闭它就好了。Problem(Abstract)After upgrading the JDBC driver from the Legacy JDBC Type 2 driver (db2java.zip) to the Data Server Driver for JD
Oracle数据库,结果集已关闭(SQLException: Closed Resultset)
在制作BBS论坛的过程中,根据需要,我计划将数据库的访问、查询操作和查询结果分在两个函数中进行,即在数据库操作类DBAccess中有两个函数(错误代码): private ResultSet executeQuery(String sql) throws SQLException { try{ conn=ds.getConnection(); conn.setAutoCo
springBoot+mybatis+pgsql 配置druid连接池,启动时出现resultset已关闭
springBoot+mybatis+pgsql 配置druid连接池,启动时出现resultset已关闭 初次使用druid连接池,按照网上的博文配置完成之后,莫名奇妙的出现了以下的错误,之后就去官网找demo重新配置,发现代码并没有什么问题,可报错信息依然存在。错误信息如下: 2018-03-21 16:59:30.603 [Druid-ConnectionPool-Creat...
ResultSet关闭异常
正常情况下如果使用Statement执行完一个查询,又去执行另一个查询时这时候第一个查询的结果集就会被关闭,也就是说,所有的Statement的查询对应的结果集是一个,如果调用Connection的commit()方法也会关闭结果集。可保持性就是指当ResultSet的结果被提交时,是被关闭还是不被关闭。JDBC2.0和1.0提供的都是提交后ResultSet就会被关闭。不过在JDBC3.0中,我
operation not allowed after resultset closed错误的解决
就我目前碰到的过的,主要有两种情况会产生这样的问题,一个就是在百度里被转来转去的答案: 一个stmt多个rs进行操作.那么从stmt得到的rs1,必须马上操作此rs1后,才能去得到另外的rs2,再对rs2操作. 不能互相交替使用,会引起rs已经关闭错误.错误的代码如下: stmt=conn.createStatement();  rs=stmt.executeQuery("se
错误:Operation not allowed after ResultSet closed
     今天做学校的精品课程网 ,又遇到了一些问题,错误提示是:Operation not allowed after ResultSet closed,在网上找了一下,一篇文章解决了我的问题,如下一个stmt多个rs进行操作引起的ResultSet已经关闭错误一个stmt多个rs进行操作.那么从stmt得到的rs1,必须马上操作此rs1后,才能去得到另外的rs2,再对rs2操作.不能互
springboot配置sharding-jdbc,启动时出现resultset以关闭
     1. 本来是用的是官方的demo进行学习配置的,结果都配置好以后莫名出现了下列错误2018-03-05 16:59:30.603 [Druid-ConnectionPool-Create-1140697305] INFO com.alibaba.druid.pool.DruidDataSource - put physical connection to pool failed. 20...
数据库操作错误之“Operation not allowed after ResultSet closed”
进行数据库查询时出现的错误: select * from `book_info` where `Name` = 'asa' java.sql.SQLException: Operation not allowed after ResultSet closed     at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:
JDBC:报错-Operation not allowed after ResultSet closed(一)
今天遇到一个问题: 下面是数据库操作封装java代码 public static final String DBDRIVER = "org.gjt.mm.mysql.Driver";// 定义MySql的驱动程序 public static final String DBURL = "jdbc:mysql://localhost:3306/pis";// 定义连接地址 p
db2数据库抛错:Result set already closed
在weblogic跑得好好的代码,放到db2上抛了这个错误:        2015-11-09 15:04:38: [ERROR]( Log.java,115 ) - Result set already closedjava.sql.SQLException: Result set already closed at weblogic.jdbc.wrapper.ResultSet.chec