我在一个JSP页面里用ResultSet从数据库里提取出数据,现在想把这些数据传到下一个JSP页面里,可是把ResultSet放到Session里后,在另一个JSP页面里无法提取,是不是不能这样传输?应该怎么把这些数据传到下一个页面呢?请详细说说,谢谢
解决方案 »
- eclipse3.3.2版本检测不出来lomboz,请教
- 这个类里边到底是先执行start()方法呢?还是先执行paint()方法?
- 程序员这行业文凭是不是很重要?
- 求 海鲜超市收支系统的项目 原码!急
- 请教:请问如何在Swing中实现菜单的下划线,比如VB中用&F
- 在java打印时计算一个字符所占的像素是高和宽是多少点(字符:用不同的字体,不同的大小)
- 谁会在linux下安装java?
- 求助一个float类型的问题
- 求教高手,怎样能在代码里动态的import外面的包
- 为什么密码区域取不到密码?
- 为什么APPLET比其他插件具有更好的安全性?没教会不给分
- AWT组件与Swing组件的区别和关联?
在JSP页面<%
ResultSet rs=(ResultSet)session.getAttribute("ResultSet");
下面就是循环遍历!
%>
能放到request中的东西就不要放在session中
session耗费服务器资源
ResultSet
是要跟数据库建立一个连接的,因为
ResultSet 的机制是 游标。你这样的话,是一直跟数据库建立了一个游标,而且永远耗费一个数据库连接。
也就是说一个 ResultSet 在使用中,必须要数据库连接不关闭的,要不你.next的时候,游标咋办?
如果你要是用1000 个这样的session,数据库就死了。
应该将查询的结果存到javabean中,然后再调用javabean中的内容,
不要图写代码省劲犯大错误哈.
学习中...
ResultSet要使用,一定须数据库连接开着
这个会造成资源浪费
如果实在要用,可以转成Result类的对象
Result result=ResultSupport.toResult(resultSet);
这样,就可以把数据库连接对象关闭了
因为,ResultSet对象,持有数据库资源,长时间的不使用该资源,可能会产生非常多的问题。
比如,连接池资源耗尽,Socket超时,Connection已经被关闭了,等等。通常建议的做法是:
遍历ResultSet后,我们会及时close掉相关的资源,可以让系统及时的回收这些资源,供其他用户使用。
将ResultSet遍历的结果,封装成对象,放入Session中,进行页面跳转,跳转的目标页面做数据显示用。意思和楼上几位差不多。
楼上的达人们说得很有理阿但是,偶觉得lz不会是想要保存ResultSet对象,人家说了吗,是保存数据。
那就把数据取出来放到容器里就好了嘛
2.数据库连接类
3.VO类存取数据;
4.DAO数据操作接口(增删改查等功能)
3.数据操作类实现DAO接口.
5.servlet控制器
6.前台功能页面.
7.前台数据显示页面.
三层机构
大概思路如下:
前台功能页面,发出请求,servlet控制器接受请求,(比如说查询某个数据(库存啊,单价什么的))
servlet控制器接受请求执行前台发出的功能,调用数据操作类的方法得到前台功能想要的数据;
servlet控制器将得到数据或值返回给前台显示页面;
通常的做法肯定是在后台遍历结果集,将结果集的数据添加到list中,将list存放到范围对象中,在jsp中使用JSTL(<c:forEach>)语言,或者代码块进行遍历。
楼上的同学已经说了不能将resultSet放到session中,我就不重复这点了。我来解释一下,为什么到下一个页面无法提取的。一般,数据库资源是需要关闭的。你看看,是不是有这样一个ResultSet.close();我估计你在第一个jsp页面里至少调用了Connection.close()关闭数据库连接。当你关闭Statemnt或者Connection的时候,从他们身上建立其他对象(例如ResultSet)也不可用了。如果你的第一个jsp不关闭数据库连接,也不关闭Statment,什么都不关。那么你在第二哥页面里还可以将ResultSet重session里取除来正常访问。当然,这个不是明智的做法。
你把没条记录封装成javabean对象,然后把这些对象放到List里面,最后把List实例保存到session中就可以了。