ResultSet能做为Session传输吗?

surf182 2009-07-22 04:56:01
我在一个JSP页面里用ResultSet从数据库里提取出数据,现在想把这些数据传到下一个JSP页面里,可是把ResultSet放到Session里后,在另一个JSP页面里无法提取,是不是不能这样传输?应该怎么把这些数据传到下一个页面呢?请详细说说,谢谢
...全文
213 26 打赏 收藏 转发到动态 举报
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
wst0350 2009-07-23
  • 打赏
  • 举报
回复
有想法是不错滴
fisherhe 2009-07-23
  • 打赏
  • 举报
回复
建议楼主还是先将数据库的数据resultSet封装成一个javabean的对象然后在session.setAttribute(),这是涉及到持久层的操作就尽量不要放在业务层上面去处理,而且一旦数据量大了,就会很消耗资源的哈,恩我赞成楼上说的 能用作用范围小的如request就不要用session...
lovecj6185 2009-07-23
  • 打赏
  • 举报
回复
[Quote=引用楼主 surf182 的回复:]
我在一个JSP页面里用ResultSet从数据库里提取出数据,现在想把这些数据传到下一个JSP页面里,可是把ResultSet放到Session里后,在另一个JSP页面里无法提取,是不是不能这样传输?应该怎么把这些数据传到下一个页面呢?请详细说说,谢谢
[/Quote]

楼上的达人们说得很有理阿

但是,偶觉得lz不会是想要保存ResultSet对象,人家说了吗,是保存数据。
那就把数据取出来放到容器里就好了嘛
zuoguodang 2009-07-23
  • 打赏
  • 举报
回复
不要存ResultSet对象,因为ResultSet需要和数据库有很大关系,不用的时候需要关闭。
你把没条记录封装成javabean对象,然后把这些对象放到List里面,最后把List实例保存到session中就可以了。
Jamin_Ma 2009-07-23
  • 打赏
  • 举报
回复
可以保存在session中,要设置一下maxAge。不设置的情况下默认页面关闭就删除session。

session.setMaxAge(int i);i是正数:过i秒后删除;i是0,马上删除;i是负数:关闭浏览器删除
xinleicn 2009-07-23
  • 打赏
  • 举报
回复
还真没有试过. 试试去. 看看行不.
mianfeidog 2009-07-23
  • 打赏
  • 举报
回复
学习。
ArayChou 2009-07-23
  • 打赏
  • 举报
回复
[Quote=引用楼主 surf182 的回复:]
我在一个JSP页面里用ResultSet从数据库里提取出数据,现在想把这些数据传到下一个JSP页面里,可是把ResultSet放到Session里后,在另一个JSP页面里无法提取,是不是不能这样传输?
[/Quote]

楼上的同学已经说了不能将resultSet放到session中,我就不重复这点了。我来解释一下,为什么到下一个页面无法提取的。

一般,数据库资源是需要关闭的。你看看,是不是有这样一个ResultSet.close();我估计你在第一个jsp页面里至少调用了Connection.close()关闭数据库连接。当你关闭Statemnt或者Connection的时候,从他们身上建立其他对象(例如ResultSet)也不可用了。

如果你的第一个jsp不关闭数据库连接,也不关闭Statment,什么都不关。那么你在第二哥页面里还可以将ResultSet重session里取除来正常访问。

当然,这个不是明智的做法。
closewbq 2009-07-23
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 shadow55 的回复:]
引用 2 楼 closewbq 的回复:
当然可以了,session.Attribute("ResultSet",ResultSet);
在JSP页面
HTML code <%
ResultSet rs=(ResultSet)session.getAttribute("ResultSet");
下面就是循环遍历!%>
你会这样写程序吗?不要将楼主引入歧途啊!
[/Quote]
不好意思,我只是想说这样完全可以。我并没有建议这样做。
通常的做法肯定是在后台遍历结果集,将结果集的数据添加到list中,将list存放到范围对象中,在jsp中使用JSTL(<c:forEach>)语言,或者代码块进行遍历。
CamilleTao 2009-07-23
  • 打赏
  • 举报
回复
1.自定义异常类
2.数据库连接类
3.VO类存取数据;
4.DAO数据操作接口(增删改查等功能)
3.数据操作类实现DAO接口.
5.servlet控制器
6.前台功能页面.
7.前台数据显示页面.
三层机构
大概思路如下:
前台功能页面,发出请求,servlet控制器接受请求,(比如说查询某个数据(库存啊,单价什么的))
servlet控制器接受请求执行前台发出的功能,调用数据操作类的方法得到前台功能想要的数据;
servlet控制器将得到数据或值返回给前台显示页面;
shadow55 2009-07-23
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 closewbq 的回复:]
当然可以了,session.Attribute("ResultSet",ResultSet);
在JSP页面
HTML code<%
ResultSet rs=(ResultSet)session.getAttribute("ResultSet");
下面就是循环遍历!%>
[/Quote]你会这样写程序吗?不要将楼主引入歧途啊!
dragon45 2009-07-23
  • 打赏
  • 举报
回复
前几天培训的时候,也有同事写出了这样的代码。

多作试验从错误中学习是不错的方式,但是真正作项目的时候不要这样写就可以了。

cwjieNo1 2009-07-22
  • 打赏
  • 举报
回复
学习了·
冰思雨 2009-07-22
  • 打赏
  • 举报
回复
可以是可以,就是不应该把ResultSet放到session对象中进行页面跳转的传递。
因为,ResultSet对象,持有数据库资源,长时间的不使用该资源,可能会产生非常多的问题。
比如,连接池资源耗尽,Socket超时,Connection已经被关闭了,等等。

通常建议的做法是:
遍历ResultSet后,我们会及时close掉相关的资源,可以让系统及时的回收这些资源,供其他用户使用。
将ResultSet遍历的结果,封装成对象,放入Session中,进行页面跳转,跳转的目标页面做数据显示用。

意思和楼上几位差不多。
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 ouyangyh 的回复:]
绝对不建议
ResultSet要使用,一定须数据库连接开着
这个会造成资源浪费
如果实在要用,可以转成Result类的对象
Result result=ResultSupport.toResult(resultSet);
这样,就可以把数据库连接对象关闭了
[/Quote]
使用CachedRowset,可以断开连接,放心存到session
ouyangyh 2009-07-22
  • 打赏
  • 举报
回复
绝对不建议
ResultSet要使用,一定须数据库连接开着
这个会造成资源浪费
如果实在要用,可以转成Result类的对象
Result result=ResultSupport.toResult(resultSet);
这样,就可以把数据库连接对象关闭了
BurnedVanilla 2009-07-22
  • 打赏
  • 举报
回复
理论和实际上都是可以实现的,但是这样做的思想是错误的,楼上有人已经指出了.
应该将查询的结果存到javabean中,然后再调用javabean中的内容,
不要图写代码省劲犯大错误哈.
学习中...
clihean 2009-07-22
  • 打赏
  • 举报
回复
应该用容器类在页面中传数据。
lovetysx 2009-07-22
  • 打赏
  • 举报
回复
学习了,我也一直不知道原因
zl3450341 2009-07-22
  • 打赏
  • 举报
回复
。。。学习了
加载更多回复(6)

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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