我在一个JSP页面里用ResultSet从数据库里提取出数据,现在想把这些数据传到下一个JSP页面里,可是把ResultSet放到Session里后,在另一个JSP页面里无法提取,是不是不能这样传输?应该怎么把这些数据传到下一个页面呢?请详细说说,谢谢

解决方案 »

  1.   

    用容器类,里面是数据的javabean,一般都是这么做的
      

  2.   

    当然可以了,session.Attribute("ResultSet",ResultSet);
    在JSP页面<%
    ResultSet rs=(ResultSet)session.getAttribute("ResultSet");
    下面就是循环遍历!
    %>
      

  3.   

    把查询结果放到容器中,传到页面不要将ResultSet放到session中
    能放到request中的东西就不要放在session中
    session耗费服务器资源
      

  4.   

    大哥好变态啊。
    ResultSet
    是要跟数据库建立一个连接的,因为
    ResultSet 的机制是 游标。你这样的话,是一直跟数据库建立了一个游标,而且永远耗费一个数据库连接。
    也就是说一个 ResultSet 在使用中,必须要数据库连接不关闭的,要不你.next的时候,游标咋办?
    如果你要是用1000 个这样的session,数据库就死了。
      

  5.   

    理论上这种是可以实现的,不过这样做的话,就要求这个连接一直打开,什么数据库都给你搞死掉了。要共享数据可以使用List之类的容器来存储啊,不过我认为一般来说通过session存储这样多的数据都不是一种很好的方式,一般即使要共享的话,也应该是共享一个查询数据的方式和条件等这些信息,等到要需要的时候再根据这个条件去数据库检查,除非是共享的数据不是很多,而且使用非常频繁,才会考虑像你这样使用。否则即使你用List存储,数据库不被你搞跨,web服务器却被你搞跨了。
      

  6.   

    理论和实际上都是可以实现的,但是这样做的思想是错误的,楼上有人已经指出了.
    应该将查询的结果存到javabean中,然后再调用javabean中的内容,
    不要图写代码省劲犯大错误哈.
    学习中...
      

  7.   

    绝对不建议
    ResultSet要使用,一定须数据库连接开着
    这个会造成资源浪费
    如果实在要用,可以转成Result类的对象
    Result result=ResultSupport.toResult(resultSet);
    这样,就可以把数据库连接对象关闭了
      

  8.   

    使用CachedRowset,可以断开连接,放心存到session
      

  9.   

    可以是可以,就是不应该把ResultSet放到session对象中进行页面跳转的传递。
    因为,ResultSet对象,持有数据库资源,长时间的不使用该资源,可能会产生非常多的问题。
    比如,连接池资源耗尽,Socket超时,Connection已经被关闭了,等等。通常建议的做法是:
    遍历ResultSet后,我们会及时close掉相关的资源,可以让系统及时的回收这些资源,供其他用户使用。
    将ResultSet遍历的结果,封装成对象,放入Session中,进行页面跳转,跳转的目标页面做数据显示用。意思和楼上几位差不多。
      

  10.   


    楼上的达人们说得很有理阿但是,偶觉得lz不会是想要保存ResultSet对象,人家说了吗,是保存数据。
    那就把数据取出来放到容器里就好了嘛
      

  11.   

    1.自定义异常类
    2.数据库连接类
    3.VO类存取数据;
    4.DAO数据操作接口(增删改查等功能)
    3.数据操作类实现DAO接口.
    5.servlet控制器
    6.前台功能页面.
    7.前台数据显示页面.
    三层机构
    大概思路如下:
    前台功能页面,发出请求,servlet控制器接受请求,(比如说查询某个数据(库存啊,单价什么的))
    servlet控制器接受请求执行前台发出的功能,调用数据操作类的方法得到前台功能想要的数据;
    servlet控制器将得到数据或值返回给前台显示页面;
      

  12.   

    不好意思,我只是想说这样完全可以。我并没有建议这样做。
    通常的做法肯定是在后台遍历结果集,将结果集的数据添加到list中,将list存放到范围对象中,在jsp中使用JSTL(<c:forEach>)语言,或者代码块进行遍历。
      

  13.   


    楼上的同学已经说了不能将resultSet放到session中,我就不重复这点了。我来解释一下,为什么到下一个页面无法提取的。一般,数据库资源是需要关闭的。你看看,是不是有这样一个ResultSet.close();我估计你在第一个jsp页面里至少调用了Connection.close()关闭数据库连接。当你关闭Statemnt或者Connection的时候,从他们身上建立其他对象(例如ResultSet)也不可用了。如果你的第一个jsp不关闭数据库连接,也不关闭Statment,什么都不关。那么你在第二哥页面里还可以将ResultSet重session里取除来正常访问。当然,这个不是明智的做法。
      

  14.   

    可以保存在session中,要设置一下maxAge。不设置的情况下默认页面关闭就删除session。   session.setMaxAge(int i);i是正数:过i秒后删除;i是0,马上删除;i是负数:关闭浏览器删除
      

  15.   

    不要存ResultSet对象,因为ResultSet需要和数据库有很大关系,不用的时候需要关闭。
    你把没条记录封装成javabean对象,然后把这些对象放到List里面,最后把List实例保存到session中就可以了。
      

  16.   

    建议楼主还是先将数据库的数据resultSet封装成一个javabean的对象然后在session.setAttribute(),这是涉及到持久层的操作就尽量不要放在业务层上面去处理,而且一旦数据量大了,就会很消耗资源的哈,恩我赞成楼上说的 能用作用范围小的如request就不要用session...