首页 > 代码库 > Result和ResultSet的区别
Result和ResultSet的区别
微软的.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类来存放放回的数据,它的流程和生命周期如下:
使用ResultSet来返回数据库查询结果 | |||||||
Client | --> | Connection | --> | Statement | --> | JDBC Driver | --+ |
Database | |||||||
Client | <-- | Parsing | <-- | ResultSet | <-- | JDBC Driver | --+ |
Connection lifecycle | |||||||
ResultSet lifecycle |
Result和ResultSet的区别