Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 334|回复: 0

[JDBC学习]抛弃ResultSet,拥抱Res

[复制链接]
  • TA的每日心情
    开心
    2021-3-12 23:18
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2014-10-11 06:21:53 | 显示全部楼层 |阅读模式
    微软的.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="" var="user">
    59   <c:out value=""/>
    60 </c:forEach>
    61 </body>
    62 </html>
                      [/code]
       
      



      
      
       
       

         
       

         
       
      

      

      










    源码下载:http://www.hnzz3z.com:8103/zz3zcwb/cwb/dir2/no
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2025-2-26 07:12 , Processed in 0.359492 second(s), 48 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表