ResultSet与Result

微软的.NET平台上面的数据访问有一个特点,就是数据查询的结果,可以放在内存中,以XML格式进行描述,不需要一直与数据库保持在线连接,用DataSet + Data Adapter来实现!

而在JDBC中,我们通常使用javax.sql.ResultSet类来存放放回的数据,它会长期占用数据库连接的资源.是一个有点不爽的问题...

其实,在JSTL中提供了另外一种机制,让我们在返回查询结果到表示层的时候,可以做到离线使用!它就是javax.servlet.jsp.jstl.sql.Result类!

Result:

    1,  定义

    表示数据库结果集的数据表。完整名称javax.servlet.jsp.jstl.sql.Result

    2,  获得

    为了得到ResultSet,我们首先必须先要得到Result,然后使用ResultSupport.toResult(rs)转化即可。

    3,遍历

    Result的结构为SortedMap数组(SortedMap[]),即表中每一行为一个SortedMap。其中key值为列名,value值为列值。

    遍历时先取出表中的每一行,即SortedMap[]中每一个元素--使用Result.getRows()方法可以得到SortedMap[],然后通过key值取得value值

数据库表TestResult:

JAVA代码:

 1 import java.sql.Connection;
 2 import java.sql.DriverManager;
 3 import java.sql.PreparedStatement;
 4 import java.sql.ResultSet;
 5 import java.sql.SQLException;
 6 import java.util.SortedMap;
 7 import javax.servlet.jsp.jstl.sql.Result;
 8 import javax.servlet.jsp.jstl.sql.ResultSupport;
 9 
10 
11 public class TestResult {
12     public static void main(String[] args) {
13         try {
14             //JDBC连接数据库
15             Class.forName("oracle.jdbc.OracleDriver");
16             Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:ORCL","wladmin","lan2711");
17             PreparedStatement pStat = conn.prepareStatement("select * from testresult");
18             //得到ResultSet
19             ResultSet rs = pStat.executeQuery();
20             //软换为Result
21             Result result = ResultSupport.toResult(rs);
22             //遍历--选通过result.getRows()得到SortedMap[],使用for遍历SortedMap[]里的每一元素
23             for(SortedMap item : result.getRows()){
24                 //通过列名来值取得SortedMap中的value
25                 System.out.println("id:"+item.get("id")+"   name:"+item.get("name"));
26             }
27         } catch (ClassNotFoundException e) {
28             e.printStackTrace();
29         } catch (SQLException e) {
30             e.printStackTrace();
31         }
32         
33     }
34 }

 结果 :

id:1    name:hello
id:2    name:world

原文地址:https://www.cnblogs.com/likailan/p/3256568.html