微软的.NET平台上面的数据访问有一个特点,就是数据查询的结果,可以放在内存中,以XML格式进行描述,不需要一直与数据库保持在线连接,用DataSet + Data Adapter来实现!
而在JDBC中,我们通常使用javax.sql.ResultSet类来存放放回的数据,它的流程和生命周期如下:
使用ResultSet来返回数据库查询结果 |
Client |
--> |
Connection |
--> |
Statement |
--> |
JDBC Driver |
--+ |
|
Database |
Client |
<-- |
Parsing |
<-- |
ResultSet |
<-- |
JDBC Driver |
--+ |
|
|
|
|
|
|
|
|
|
Connection lifecycle |
|
|
|
|
|
|
ResultSet lifecycle |
|
|
我们可以看到,这样会长期占用数据库连接的资源,是一个有点不爽的问题...
其实,在JSTL中提供了另外一种机制,让我们在返回查询结果到表示层的时候,可以做到离线使用!它就是javax.servlet.jsp.jstl.sql.Result类!
1 <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> 2 <%@page contentType="text/html; charset=UTF-8"%> 3 <%@page import="java.sql.Connection"%> 4 <%@page import="java.sql.DriverManager"%> 5 <%@page import="java.sql.ResultSet"%> 6 <%@page import="java.sql.SQLException"%> 7 <%@page import="java.sql.Statement"%> 8 <%@page import="javax.servlet.jsp.jstl.sql.Result"%> 9 <%@page import="javax.servlet.jsp.jstl.sql.ResultSupport"%> 10 <% 11 // 暂且把这个下面的内容看作多层架构中的DAO好了,我偷懒了! 12 Connection conn = null; 13 Statement stmt = null; 14 ResultSet rs = null; 15 String strDbUrl 16 = "jdbc:mysql://localhost/tutorial?user=tutorial&password=tutpwd"; 17 try { 18 //开始与数据库作查询 19 Class.forName("com.mysql.jdbc.Driver").newInstance(); 20 conn = DriverManager.getConnection(strDbUrl); 21 stmt = conn.createStatement(); 22 String strSql = "SELECT * FROM R_TUT_USERS"; 23 rs = stmt.executeQuery(strSql); 24 //把ResultSet转化成Result 25 Result userData = ResultSupport.toResult(rs); 26 //当我们把结果放到某个Model bean后,就可以关闭数据库连接了. 27 //为了简化,我们暂且把pageContext看作Model Bean好了! 28 pageContext.setAttribute("userData", userData); 29 } 30 catch (Exception ex) { 31 // handle any errors 32 System.out.println("SQLException: " + ex.getMessage()); 33 } 34 finally { 35 try { 36 if (rs != null) { 37 rs.close(); 38 } 39 if (stmt != null) { 40 stmt.close(); 41 } 42 if (conn != null) { 43 conn.close(); 44 } 45 } 46 catch (SQLException ex) { 47 System.out.println("SQL Exception: " + ex.getMessage()); 48 } 49 } 50 //DAO的逻辑结束 51 %> 52 <html> 53 <head> 54 <title>test</title> 55 </head> 56 <body> 57 <!--// 下面当作是表示层吧 //--> 58 <c:forEach items="${userData.rows}" var="user"> 59 <c:out value='${user.name}'/> 60 </c:forEach> 61 </body> 62 </html>
|
分享到:
相关推荐
asp.net使用DataSet数据集插入表记录
VB.net中DataSet和JSON形式的数据相互转换的代码,可以拿来直接说用
DataSet对象! 很值得下载看看!资源免费,大家分享!!
.net(dataset)输出流导出excel(无需生成模版excel文件,直接输出数据流导出excel表格)
对数据库断开的数据操作,将数据库数据放到内存中操作。
将查询来的DataSet转成JSon形式,接收时注意,string和int字段都是用String形式的接受
该例ADO.NET中非常重要的案例,也是ADO.NET的核心操作。与常见的访问数据库操作不一样,该操作选择用DataTable/DataSet作为缓冲,用户操作数据库实际上并未在后台数据库直接修改,而是在DataTable/DataSet上进行;...
ASP.NET应用:DataSet 和XML(DataSet and XML)--vs2003,ASP.NET应用:DataSet 和XML(DataSet and XML)--vs2003
离线模式数据访问DataSet和DataAdapter
解决.net DataSet导出excel问题
ADO.NET引入了离线的数据结果集(Disconnected DataSet)这个概念,通过使用离线的数据结果集,程序员更可以在数据库断开的情况下访问数据库。 ADO.NET还提供了对XML格式文档的支持,所以通过ADO.NET组件可以...
DELPHI中 实现DATASET 一种内存的数据库(单表) 能对单表 字段 数据 添加 删除 修改 列表 并 回写数据库
今天在论坛遇到有人问如何在ASP.NET的数据控件中如何一次绑定多个表?这个问题,平时很少看到,一般在数据绑定之前,数据都是放在一个表中的,实际上,如果表之间存在关系,绑定多个表也是可以的。下面就是 DataSet...
Json数据转换为ADO.NET DataSet其实方法有很多,Newtonsoft.Json也提供了DataSet的Converter用以转换Json数据。但是有些情况下DataSet Converter并不管用,而且也不一定能够满足项目需要。这里介绍另一种简单有效的...
xml与dataset介绍及它们之间相互转换的介绍
ASP.net中DataSet和XML深入编程 ASP.net中DataSet和XML深入编程 好好哦。。。。
asp.net通用数据访问类库的示例: (1)反射实现根据模型生成增删改查sql语句 (2)泛型实现数据的通用访问 //--------------------------------小示例: public static DataSet GetDataSet() where T : class,new...
NULL 博文链接:https://andrew28.iteye.com/blog/776337
怎样将DataSet中修改(增加_删除_修改)过的记录更新进数据库中怎样将DataSet中修改(增加_删除_修改)过的记录更新进数据库中
使 DataSet 与 XmlDataDocument 同步:讨论同步访问单个数据集的关系和分层视图的 .NET 框架中的可用功能,并解释如何在 DataSet 和 XmlDataDocument 之间创建同步关系。 嵌套的 DataRelation:讨论嵌套 DataRelation...