JDBC中的ResultSet无法多次循环的问题。
前几天碰见了一个很奇葩的问题,使我百思不得其解,今天就写一下我遇见的问题吧,也供大家参考,别和我犯同样的毛病。
首先说下jdbc,jdbc是java是一种用于执行SQL语句的Java API,从jdbc中取值我们一般都是Statement stmt 的next()方法,或者是PreStatement 的next()方法,
next()方法用来判断下一条记录是否存在,如果存在就执行一次,游标就向后移动。最开始的时候,游标位于第一条记录之前,也就是说执行一次后,游标移动到第一条记录的位置,随着循环调用依次后移,移动到最后一条记录之后时结束。
如果,结果集中只存在一条记录,那么执行一次后,游标移动到该条记录位置。当再次调用next()方法时,游标就会移动到该条记录之后,那么执行就会结束。
if(rs.next())这个方法只会执行一次,判断ResultSet结果集中是否存在数据,如果存在就会执行,然后跳出,如果想要循环多次就需要使用while(rs.next()),这样的话游标就会一直向下移动,直到移动到数据的末尾跳出循环。
可是我在循环数据的时候用的就是while(rs.next()) 还是跳出了循环,我在Eclipse中打了断点许多次也没有发现问题的所在,最后在疯狂的查找资料的时候,终于找到了问题的所在,就是如果我们在写jdbc的时候,如果需要对数据进行多次循环,需要嵌套多个ResultSet使用的话,我们不能再一个ResultSet循环中再次的嵌套ResultSet,这样的话,游标就会变更到另一个Result中,然后就跳出了循环,我的解决办法是,可以将需要嵌套的ResultSet我们先查询出来数据,然后,我们使用一个List集合add()进去,我们在另一个ResultSet中遍历这个集合然后问题就解决了!
也许我的理解有些不对的地方,希望大家指正,如果大家遇到相同的问题了,希望可以看到此文章,快速的解决问题!
JDBC中的ResultSet无法多次循环的问题。的更多相关文章
- JDBC中的ResultSet
ResultSet:结果集.存放数据库中的数据,可以将它想象成一张数据表,通过Statement对象中的executeQuery()方法获得 import com.mysql.jdbc.Stateme ...
- 获取JDBC中的ResultSet的记录的条数
方法一:利用ResultSet的getRow方法来获得ResultSet的总行数 Java代码 ResultSet rs; rs.last(); //移到最后一行 int rowCount = rs. ...
- 为什么jdbc中的resultset只能取一次去第二次就报错了
引用 6 楼 的回复: 好吧各位,应该写getInt(1)但是我要问的是为什么第二次用会出错 啊,好古老的一个问题... 第二次出错的原因,是因为你创建Statement的时候,没有指定结果集(游标 ...
- 获取jdbc中resultSet结果集的大小
当我们执行完一条Sql语句,获取到一个 ResultSet 对象后,有时我们需要立即知道到底返回了多少个元素,但是 ResultSet 并没有提供一个 size() 方法 or length 的属性, ...
- 测试 jdbc 中连接关闭的时机
测试 jdbc 中连接关闭的时机 写一段程序,测试 jdbc 连接的关闭情况 /** * 测试 jdbc 连接的关闭情况 */ public static void testOpenCon(){ // ...
- [转]JDBC中日期时间的处理技巧
Java中用类java.util.Date对日期/时间做了封装,此类提供了对年.月.日.时.分.秒.毫秒以及时区的控制方法,同时也提供一些工具方法,比如日期/时间的比较,前后判断等. java.uti ...
- JDBC中的事务-Transaction
事务-Transaction 某些情况下我们希望对数据库的某一操作要么整体成功,要么整体失败,经典的例子就是支付宝提现.例如我们发起了支付宝到银行卡的100元提现申请,我们希望的结果是支付宝余额减少1 ...
- 一、DAO设计模式 二、DAO设计模式的优化 三、JDBC中的事务,连接池的使用
一.DAO设计模式概述###<1>概念 DAO,Data Access Object ,用于访问数据库的对象. 位于业务逻辑和数据持久化层之间,实现对数据持久化层的访问 ...
- 多线程中,ResultSet为空,报错空指针
最近在数据库查询数据时,由于数据量太大,使用了多线程,通过线程池建了好几个线程,然后调用了一个封装好的jdbc查询语句. 结果在多线程中,ResultSet报错空指针. 仔细查阅后,才发现多个线程访问 ...
随机推荐
- macvlan 网络隔离和连通 - 每天5分钟玩转 Docker 容器技术(57)
上一节我们创建了两个 macvlan 并部署了容器,网络结构如下: 本节验证 macvlan 之间的连通性. bbox1 能 ping 通 bbox3,bbox2 能 ping 通 bbox4.即:同 ...
- Go语言学习笔记(八)golang 操作 Redis & Mysql & RabbitMQ
加 Golang学习 QQ群共同学习进步成家立业工作 ^-^ 群号:96933959 Reids 安装导入 go get github.com/garyburd/redigo/redis import ...
- 一篇深入剖析PCA的好文
主成分分析(Principal components analysis)-最大方差解释 在这一篇之前的内容是<Factor Analysis>,由于非常理论,打算学完整个课程后再写.在写这 ...
- SpringMVC中文件的上传(上传到服务器)和下载问题(二)--------下载
一.建立一个简单的jsp页面. 我们在建好的jsp的页面中加入一个超链接:<a href="${pageContext.request.contextPath}/download&qu ...
- 第10天:CSS初始化操作
在写页面过程中,每个浏览器都会有默认样式,为了避免浏览器的样式兼容问题,我们会在样式开始部分对常用标签进行重置样式.这样我们在写样式时,就不会有误差.常用的CSS标签初始化如下: @charset & ...
- 使用Visual Studio Code和typescript 开发调试React Native项目
关于React Native的详细介绍我就不叙述了,他是使用js构建原声app的开发框架.一次变异多平台运行,非常强大.但是个人不喜欢js的过于灵活(弱类型)的语法.强大的强类型语言Typescrip ...
- JAVA定时任务实现的几种方式
近日项目开发中需要执行一些定时任务,比如需要在每天凌晨时候,分析一次前一天的日志信息,借此机会整理了一下定时任务的几种实现方式,由于项目采用spring框架,所以我都将结合spring框架来介绍. 一 ...
- NET .NET深入体验和实战精要
在学习.NET之前要充分理解基础,在这里将基础的知识点一一列举. 万丈高楼平地起 1.命名空间 命名空间是一种特殊的分类机制,他将与一个特定功能集有关的所有类型都分到一起,是.避免类名冲突的一种方式 ...
- chrome保持元素hover,active状态
审查元素,选中需要hover的标签 点击"Styles"菜单中的":hov",弹出 Force element state 选中相应的 :hover :acti ...
- 深入理解line-height
什么是行间距? 古时候我们使用印刷机来出来文字.印刷出来的每个字,都位于独立的一个块中. 行间距,即传说中控制两行文字垂直距离的东东.在CSS中,line-height被用来控制行与行之间垂直距离. ...