前几天碰见了一个很奇葩的问题,使我百思不得其解,今天就写一下我遇见的问题吧,也供大家参考,别和我犯同样的毛病。
首先说下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 中连接关闭的时机
测试 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 ,用于访问数据库的对象. 位于业务逻辑和数据持久化层之间,实现对数据持久化层的访问![](1.png) ...
-
多线程中,ResultSet为空,报错空指针
最近在数据库查询数据时,由于数据量太大,使用了多线程,通过线程池建了好几个线程,然后调用了一个封装好的jdbc查询语句. 结果在多线程中,ResultSet报错空指针. 仔细查阅后,才发现多个线程访问 ...
-
JDBC中常用对象介绍
JDBC中的主要类(接口) 在JDBC中常用的类有: 1.DriverManager 2.Connection 3.Statement 4.ResultSet 1.DriverManager 其实我们 ...
随机推荐
-
IT基础架构规划方案二(计算机系统与机房规划规划)
计算机系统规划 服务器硬件选型规划方案 根据对某集团的实际调研,获取了企业业务应用系统的建设情况,随着企业信息化建设的推进,需要对各种信息化管理系统和应用系统的服务器选型进行选 ...
-
wordpress multisite functions
The <?php echo esc_html( get_site_option( 'site_name' ) ); ?> network currently powers <?ph ...
-
T-SQL优化
我们做软件开发的,大部分人都离不开跟数据库打交道,特别是erp开发的,跟数据库打交道更是频繁,存储过程动不动就是上千行,如果数据量大,人员流动大,那么我么还能保证下一段时间系统还能流畅的运行吗?我么还 ...
-
final关键字+const关键字
final关键字 1.如果我们希望某个类不被其它的类来继承(可能因为安全考虑),可以使用final. 例题 <? final class A{} class B extends A{};//会报 ...
-
Java构造器和方法的区别
摘要要学习Java,你必须理解构造器.因为构造器可以提供许多特殊的方法,这个对于初学者经常混淆.但是,构造器和方法又有很多重要的区别.原作者:Robert Nielsen 原站:www.javawor ...
-
Java之绘制方法
绘制图形所用的函数类别分别为视图类.图形单元类和页面类. 对视图类,设置窗口的位置和大小: 对图形单元类,设置图形边界: 对页面类,只有当页面作为元件,该函数才起作用,设置元件边界. 一般构建窗口我们 ...
-
MySQL之count(*)与count(id)效率比较(转)
优化总结: 1.任何情况下SELECT COUNT(*) FROM tablename是最优选择: 2.尽量减少SELECT COUNT(*) FROM tablename WHERE COL = ’ ...
-
HDU 4521 间隔》=1的LIS 线段树+dp
九野的博客,转载请注明出处:http://blog.csdn.net/acmmmm/article/details/11991119 题意: n个数 d个距离 下面n个数的序列,求序列中的最长单调递增 ...
-
CentOS 中安装和卸载 Emacs
日志更新记录: [1] 增加 CentOS7.2 (内核版本:3.10.0-514.16.1.el7.x86_64)下Emacs25.2 的安装过程,它与本文的步骤完全一样. Emacs 版本:htt ...
-
Groovy语言学习--语法基础(2)
集合和闭包 因为之前没接触过C++等,对指针也一窍不通.个人不成熟的了解 闭包是一种数据类型,可以很方便的执行一段独立的代码 简化方法的调用 package groovy /** * Groovy容器 ...