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报错空指针. 仔细查阅后,才发现多个线程访问 ...
随机推荐
- centos7破解mariadb密码
第一步,停止运行mysql: systemctl stop mariadb.service 第二步,使用" -skip-grant-tables"参数重新启动mysql: mysq ...
- DataTableToList
很简单的转换功能,这是我在GitHub上复制的一段代码(懒得再去找原地址了),感觉功能还算可以,贴出来分享给大家 /// <summary> /// DataTable to List c ...
- java web轻量级开发面试教程读书笔记:建索引时我们需要权衡的因素
场景一,数据表规模不大,就几千行,即使不建索引,查询语句的返回时间也不长,这时建索引的意义就不大.当然,若就几千行,索引所占的空间也不多,所以这种情况下,顶多属于"性价比"不高. ...
- winform WebBrowser控件中,cs后台代码执行动态生成的js
很多文章都是好介绍C# 后台cs和js如何交互,cs调用js方法(js方法必须是页面上存在的,已经定义好的),js调用cs方法, 但如果想用cs里面执行动态生成的js代码,如何实现呢? 思路大致是这样 ...
- 纹理混合遇到的问题 pre-multiplying OpenGL Android iOS
纹理混合遇到的问题 pre-multiplying OpenGL Android iOS Alpha-blending pre-multiplying of texture OpenGL Androi ...
- 手把手封装数据层之DButil数据库连接的封装
最近这段时间一直在用SSM框架做增删改查,突然想把以前还不会用框架的时候,综合百度和各种资料结合API文档抄袭而来的数据层的封装分享给大家.这边先封装一个DButil. 我这个封装就是烂大街的那种,没 ...
- javascript基础进阶——执行环境及作用域链
概念 执行环境 执行环境定义了变量或函数有权访问的其他函数,决定了他们各自的行为.每个执行环境都有一个与之关联的变量对象. 变量对象 环境中定义的所有变量和函数都保存在这个对象中. 全局执行环境 全局 ...
- 进程管理之system
system定义 #include<stdlib.h> int system(const char *command); 首先要知道,system函数是c库中的函数,而不是系统调用.其实s ...
- 【算法设计与分析基础】25、单起点最短路径的dijkstra算法
首先看看这换个数据图 邻接矩阵 dijkstra算法的寻找最短路径的核心就是对于这个节点的数据结构的设计 1.节点中保存有已经加入最短路径的集合中到当前节点的最短路径的节点 2.从起点经过或者不经过 ...
- 安装oracle后登录时出现 ERROR: ORA-01031 insufficient privileges
运行环境:在自己笔记本电脑(win10)上安装测试 操作系统版本:64位win8.1 Oracle版本:64位 oracle 11g 安装oracle 成功后//以管理员身份登录oracle 在cmd ...