微软的.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