ResultSet和Result的区别
来源:互联网 发布:mac不能联网怎么重装 编辑:程序博客网 时间:2024/06/06 03:23
微软的.NET平台上面的数据访问有一个特点,就是数据查询的结果,可以放在内存中,以XML格式进行描述,不需要一直与数据库保持在线连接,用DataSet + Data Adapter来实现!
我们可以看到,这样会长期占用数据库连接的资源,是一个有点不爽的问题...
其实,在JSTL中提供了另外一种机制,让我们在返回查询结果到表示层的时候,可以做到离线使用!它就是javax.servlet.jsp.jstl.sql.Result类!
java.sql包下 Resultset接口是访问数据库得到的结果集
但该结果集必的使用须在连接对象一直开着的基础上,
为了关闭连接仍然可以使用 所以转换成Result,Result存在内存中就和连接没关系了,那么从Resultset转换成Result就用到ResultSupport类的toResult(ResultSet)方法.
ResultSupport
Result
存在于javax.jstl包下的 不属于javase,属于javaee
在开发过程中,我们不能返回ResultSet对象,连接一旦断开,在连接上建立的会话和在会话上建立的结果集都会自动关闭.所以我们必须开发类似于返回List的接口.但是针对通用函数,List是无能为力的,我们要返回比List更通用的,jstl中的Result可以完成此任务.
public Result executeQuery() throws SQLException {
Result result = null;
ResultSet rs = null;
PreparedStatement pstmt = null;
Statement stmt = null;
try {
if (values != null && values.size() > 0) {
// Use a PreparedStatement and set all values
pstmt = conn.prepareStatement(sqlValue); //SQL语句
setValues(pstmt, values); //为参数赋值,是一个数组
rs = pstmt.executeQuery();
}
else {
// Use a regular Statement
stmt = conn.createStatement();
rs = stmt.executeQuery(sqlValue);
}
result = ResultSupport.toResult(rs);
}finally {
if (rs != null) {
try {rs.close();} catch (SQLException e) {}
}
if (stmt != null) {
try {stmt.close();} catch (SQLException e) {}
}
if (pstmt != null) {
try {pstmt.close();} catch (SQLException e) {}
}
}
return result;
}
下面是遍列Result的代码
Result result = sqlCommandBean.executeQuery();
if (result == null || result.getRowCount() == 0) {
// Book not found
System.out.println("没有结果!!!");
} else {
System.out.println("有" + result.getRowCount() + "条记录!!!");
for(int i=0;i<result.getRowCount();i++)
{
Map map=result.getRows(); //每次循环定位到一条记录
System.out.println(map.get("字段1")+" "+map.get("字段2"));
}
}
而在JDBC中,我们通常使用javax.sql.ResultSet类来存放放回的数据,它的流程和生命周期如下:
- Result和 ResultSet 的区别?
- ResultSet和Result的区别
- ResultSet和Result的区别
- ResultSet和Result的区别与联系
- result与resultset的区别
- result和break的区别
- JDBC中Rowset和ResultSet的区别
- mysql_num_rows($result)和select count()的区别
- resultset 与result 转换
- RowSet与ResultSet的区别
- RowSet与ResultSet的区别
- RowSet与ResultSet的区别
- RowSet与ResultSet的区别
- resultset与resultsetmatadata的区别
- struts2中result-type的chain和redirectAction的区别
- struts result type redirect 重定向和转发的区别
- 自定义ResultMap中的id 和result的区别
- JDBC的Statement 和 ResultSet
- 开发工程师人生之路(强烈推荐,分析的透彻!)
- linux 下千兆网卡驱动开发 (一)
- 嵌入式Linux下串口编程(一)
- 为两个网卡增加IP路由
- linux >>> fedora 12 利用pppoe配置宽带连接
- ResultSet和Result的区别
- 在浏览器中访问exe文件
- Linux下串口程序开发
- Android基础之Process
- drawable(hdpi,ldpi,mdpi)的区别
- 硬件以及计划
- Hibernate方言总结
- 李彦宏:我爸是李刚 【令人捧腹】
- KEIL RTX51 TINY内核的分析与应用