ResultSet和Result的区别

Java ResultSet本质是游标而非结果集 ResultSet是JDBC中对数据库游标(Cursor)的抽象,代表客户端与服务端之间动态数据流的访问句柄,而非内存中的集合容器。其设计源于关系型数据库查询引擎的流式执行模型,通过fetchSize、type、concurrency等维度实现内存可控、时序可管、错误可隔离的数据消费机制。它解决的核心问题是Java应用在高并发、大数据量场景下如何安全高效地搬运数据库结果——既避免java.lang.OutOfMemoryError,又规避Connection关闭导致的‘ResultSet closed’异常 阅读详情

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

 

3DMax高效建模与人工智能:一场颠覆传统创作的效率革命 AI与3DMax的结合,不仅是工具效率的升级,更是一场创作范式的革命。从“手动雕刻”到“智能共生”,设计师的角色正从执行者转向决策者。正如网友所言:“AI不是替代人类,而是赋予凡人以神笔。”在这场变革中,唯有拥抱技术、深耕创意,方能在数字艺术的浪潮中立于潮头。参考文献与工具推荐技术原理:火星时代资讯《人工智能和三维建模》工具实测:哔哩哔哩《tyDiffusion 3dsMax应用》9、Tripo AI官网教育案例:原创论文《人工智能技术介入三维动画课程建设》 阅读详情

相关推荐

高效打卡系统设计:从行为心理学到实践工具

打卡系统作为现代时间管理的重要工具,其核心原理植根于行为心理学中的即时反馈机制和习惯养成理论。通过科学设计的打卡周期和可视化反馈,能有效提升个人自律性和目标达成率。在技术实现上,从纸质记录到数字化工具(如Notion、Excel自动化模板)的演进,为不同场景提供了灵活解决方案。特别在习惯追踪和进度管理领域,结合热力图生成、数据统计等技巧,打卡系统能转化为强大的自我监督工具。本文通过实践案例,详解如何构建兼顾弹性和约束力的个性化打卡方案,帮助读者突破'三天打鱼两天晒网'的常见困境。

weixin_30047059的博客 337

以简求快 Java快速开发框架LML数据集之Result和ResultSet

世界这么大,而我这么小,我还有什么脸面骄傲,我拿什么去自豪!唯有不停地求知,才能获得一点点的安慰。 我一直坚持着一个这样的定理:关于语言的用法,永远是官方文档最靠谱。 ResultSet: 1,定义 public interface ResultSet      表示数据库结果集的数据表,通常通过执行...

weixin_30357231的博客 210

zabbix6.0.4拓扑图链路显示流量

1. 背景介绍 网络流量监控是网络管理员必备功课,以前研究cacti的weathermap插件,网络流量大小和拥塞情况一清二楚,随着cacti的没落,weathermap插件也不能再继续使用,此时就需要学习了解新的替代方案。 经过研究和实际测试,发现zabbix的拓扑图有这个功能。 以下验证了zabbix的拓扑图显示线路流量的功能。 2. Zabbix 6显示拓扑图流量过程 选择监测-拓扑图 点进Local ne...

u013930899的博客 8478

ResultSet和Result的区别与联系

二者的区别在于前者对于修改不敏感,而后者对于修改敏感resultSetConcurency是设置ResultSet对象能够修改的,取值如下: ResultSet.CONCUR_READ_ONLY 设置为只读类型的参数。 ResultSet.CONCUR_UPDATABLE 设置为可修改类型的参数。 以下两种方法的共性:返回可滚动的结果集,当数据库变化时,当前结果集同步改变。 不可用结果集更新数据库

yax405的专栏 888

【Frida Android】实战篇4:SSL Pinning 证书绑定绕过 Hook 教程(一)

在前两章中,我们学习了中间人抓包与 Hook 抓包的基础方法,这些方法在理想环境下能够有效获取网络请求数据。但在实际的企业级应用中,出于安全防护需求,很多 APP 会启用证书绑定(SSL Pinning)机制。这种机制会让客户端对服务器证书的校验更为严格,导致常规的抓包方法(即使将 BurpSuite/Charles 证书安装到系统信任区)也无法生效。因此,从本章开始,我们将系统学习 SSL Pinning 机制的绕过技术。SSL Pinning(证书绑定)是客户端校验服务器身份的进阶安全机制。

水滴石穿 1610

小红书直播弹幕采集

本文主要介绍小红书直播间弹幕的采集,便于进行直播数据监控与直播数据进行分析。

tdl320721的博客 2540

ResultSet(结果集)、Statement

ResultSet(结果集)、Statement

weixin_46065214的博客 3508

把事务数据变成可分析数据:用 ABAP CDS 构建 Cube View 与 Query View,并拆解 OData 取数的底层路径

ABAP CDS分析建模:Cube与Query视图的实践解析 本文探讨了ABAP CDS分析建模中Cube View与Query View的核心区别与应用场景: 架构定位 Cube View作为分析型数据源,定义维度和度量的基础语义 Query View作为消费投影,控制查询可见字段和聚合逻辑 关键实现 通过@Analytics.dataCategory: #CUBE声明分析数据源 使用@DefaultAggregation确保指标口径一致性 @Analytics.query: true启用分析引擎特性 运

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 140

ResultSet的介绍与使用

ResultSet ResultSet是我们使用jdbc连接时,查询的一个返回结果集,ResultSet resultSet = stmt.executeQuery(sql),下面就使用例子介绍ResultSet的使用 例子是通过jdbc连接查account表中的数据,然后用实体类Account封装起来,返回这个类的集合。 jdbc工具类代码 package com.lingaolu.Utils; import java.io.FileReader; import java.io...

林高禄 3万+

计算机毕设项目一:基于卷积神经网络、resnet、VGG化妆品分类识别 完整代码数据可直接运行

计算机毕设项目一:基于卷积神经网络、resnet、VGG化妆品分类识别 完整代码数据可直接运行

653

C#解析基恩士(KEYENCE)PLC数据:KV协议通信与实时监控实现

KV协议是基恩士PLC使用的一种专用通信协议,通常用于与上位机进行数据交换。KV协议通过RS-232C、RS-485、Ethernet等接口与上位机通信,支持多种数据类型的读写,包括但不限于位、字、双字、浮点数等。简洁易用:KV协议的通信格式简单,易于实现。支持多种数据类型:支持位数据、字数据、定长字符串等。高效实时性:能够提供较高的实时数据交换性能,适合实时监控应用。本文介绍了如何通过C#与基恩士KV系列PLC进行通信,实现数据的解析和实时监控功能。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1806

Result和ResultSet的区别

微软的.NET平台上面的数据访问有一个特点,就是数据查询的结果,可以放在内存中,以XML格式进行描述,不需要一直与数据库保持在线连接,用DataSet + Data Adapter来实现!我们可以看到,这样会长期占用数据库连接的资源,是一个有点不爽的问题...其实,在JSTL中提供了另外一种机制,让我们在返回查询结果到表示层的时候,可以做到离线使用!它就是javax.servlet.jsp.jst...

weixin_30782293的博客 209

Python实战日志_P4_图书馆Web API服务

目标:使用Flask将图书馆系统升级为RESTful API服务,掌握Web开发基础难度:⭐⭐⭐⭐☆预计学习时间:75分钟前置要求:已完成第3篇《个人图书馆管理系统》

qq_39436086的博客 83

Result和 ResultSet 的区别?

二者的区别在于前者对于修改不敏感,而后者对于修改敏感resultSetConcurency是设置ResultSet对象能够修改的,取值如下:        ResultSet.CONCUR_READ_ONLY 设置为只读类型的参数。        ResultSet.CONCUR

LXHGDDY的专栏 1192

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

iterator 迭代器中的next() 和ResultSet 中的next()的区别

boolean next() throws SQLException 光标从当前位置向前移动一行。 ResultSet光标最初位于第一行之前;如果光标指向没有下一行数据,返回false E next() 返回迭代中的下一个元素,光标向前移动一个 boolean hasNext() 判断是否有下一个,如果有返回true,没有返回false 总的来说, ResultSet 中的next() 的执行逻辑等同于 iterator 先 boolean hasNext() 在...

weixin_44722237的博客 416

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

JDBC的Statement 和 ResultSet

这个描叙得不错 http://www.blogjava.net/fadesea/archive/2006/03/07/33965.aspx http://hi.baidu.com/suofang/blog/item/3e0124389b0fb23ab8998f03.html PrepareStatement与Statement的主要区别: 1:创建时的区别:    Statement

lawmansoft的专栏 456

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

result与resultset的区别

以前用jdbc的时候,只知道有一个resultset是结果集,今天逛论坛的时候,看见有位哥们用这个,然后就搜了一下,大家一起学习学习 ResultSet:          1,定义         public interface ResultSet      表示数据库结果集的数据表,通常通过执行查询数据库的语句生成。          2,获得         Statement

努力成就自我 2863

createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);参数解释

2007-01-13 15:42 用缺省设置创建时,ResultSet 是一种只能访问一次(one-time-through)、只能向前访问(forward-only)和只读的对象。您只能访问数据一次,如果再次需要该数据,必须重新查询数据库。 然而,并不只

Technology & Stocks 1684

java中result的作用_JAVA中的Resultset

JAVA中的Resultset(2012-04-21 14:53:34)标签:itJAVA中Resultset是一个类 .结果集(ResultSet)是数据中查询结果返回的一种对象,可以说结果集是一个存储查询结果的对象,但是结果集并不仅仅具有存储的功能,他同时还具有操纵数据的功能,可能完成对数据的更新等。结果集读取数据的方法主要是getXXX(),它的参数可以是整型,表示第几列(是从1开始的),还...

weixin_39996234的博客 2904

RowSet与ResultSet的区别

关键字: rowset与resultset的区别 RowSet 是 JDBC 2.0 开始提供的一个扩展包的接口,该接口可以允许我们作很多 ResultSet 不可做的事情。 RowSet 一共有 3 种具体的行集,它们是 CachedRowSet 、 JdbcRowSet 和 WebRowSet 。任何类型的 rowset 都实现了 RowSet 接口, RowSet 接口扩展了 Res...

gaozzsoft的专栏 155

result.next()、while(result.next)、if(result.next)的区别

result.next() 进行读取结果集的下一条数据; while(result.next) 将rs全部进行读取;(ResultSet rs=.....) if(result.next) 进行读取一次,判断是否有数据。 next()方法返回的是boolean型,用来确认有没有数据,执行一次游标后移一位,用来遍历用的; if(rs.next()只遍历一次,即第一条数据,或者说是确认是否存在...

升级打怪 4712

execute,executeQuery,executeUpdate的区别,PreparedStatement的优点,ResultSet是?

1.execute,executeQuery,executeUpdate的区别是什么? a、Statement的execute(String query)方法用来执行任意的SQL查询,如果查询的结果是一个ResultSet,这个方法就返回true。如果结果不是ResultSet,比如insert或者update查询,它就会返回false。 b、Statement的executeQuery(String query)接口用来执行select查询,并且返回ResultSet。即使查询不到记录返回的Result

qq_44374239的博客 471

Result的类型分析和总结

date: 2019-06-30 16:13 status: draft title: Result的类型分析和总结 result的不同的类型 基本的resultset 可滚动的resultset 可更新的resultset 可保持的resultset resultset 不同的之处的体现 resultset 的产生是statement的查询方法获得的,resultset的不同也是由于sta...

weixin_40488730的博客 3466

ResultMap中<id>和<result>的区别

<resultMap type="com.wkd.entity.AreaCode" id="baseResultMap"> <!-- colum:表中列名(大写) property:类中属性名 jdbcType:表中类型 --> <id column="CODE" property="code" jdbcType="VARCHAR" /> <r...

菲菲的博客 5404

JAVA ee6 result结果集_转 :jdbc结果集 resultset详解

结果集(ResultSet)是数据中查询结果返回的一种对象,可以说结果集是一个存储查询结果的对象,但是结果集并不仅仅具有存储的功能,他同时还具有操纵数据的功能,可能完成对数据的更新等.结果集读取数据的方法主要是getXXX(),他的参数可以使整型表示第几列(是从1开始的),还可以是列名.返回的是对应的XXX类型的值.如果对应那列时空值,XXX是对象的话返回XXX型的空值,如果XXX是数字类型,如F...

weixin_30715739的博客 159
上一篇: SSH整合后console显示sql语句
下一篇: struts2 package name作用
普通网友
博客等级 码龄16年 90粉丝 1232原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值