`
flamezealot
  • 浏览: 20818 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

isLast问题

阅读更多

在遍历结果集的时候,用rs.isLast()来判断是否到达最后一条,结果报出异常:

java.sql.SQLException: 对只转发结果集的无效操作: isLast

在网上找到一个解决方法是:

java 代码
  1. PreparedStatement ps = conn.prepareStatement(sql, ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);  

 但是不明白原因,在网上搜到的资料如下:

结果集:即使用Statement实例执行一个SQL语句之后得到的一个ResulSet 的对象。其类型分为三种:基本结果集,可滚动结果集,可更新结果集。
一、基本结果集
1、特点:检索方法只有两种:ResultSet.next getXXX
2、Statement语句对象创建方式:
                        a.Statement语句:createStatement()
                        b.PreParedStatement语句:PreparedcreateStatement(String sql)
                        c.CallableStatement语句:CallablecreateStatement(String sql)
3、主要方法: a.boolean next()方法  将游标移到下一行,如果是有效数据则返回true,注意查询语句返回的结果中游标的位置为第一行的前面。      
                        b.getXXX(int columnIndex)方法 按列号返回当前行中指定列的值,并将其转换为方法中XXX所对应的java数据类型。
                        c.getXXX(String columnName)方法 按名返回当前行中指定列的值,并将其转换为方法中XXX所对应的java数据类型。
 
二、可滚动结果集
1、特点:检索方法:提供各种定位游标的方法自由地再结果集中滚动。弥补了基本结果集只能先前滚动的局限性。
2 Statement语句对象创建方式:
a.Statement:createStatement(int resultSetType,int reslutSetConcurrency)
b.PrepareStatement:prepareStatement(String sql,int resultSetType,int reslutSetConcurrency)
c.CallableStatement:prepareCall(String sql,int resultSetType,int reslutSetConcurrency)

常量
含义描述
TYPE_FORWARD_ONLY
结果集不可滚动,相当于基本结果集。
TYPE_SCROLL_INSENSITIVE
结果集可滚动,但是当结果集处于打开状态时,对底层数据表中所作的变化不敏感。
TYPE_SCROL_SENSITIVE
结果集可滚动,并且当结果集处于打开状态时,对底层数据表中所作的变化敏感。
CONCUR_READ_ONLY
结果集不可更新,所以能够提供最大可能的并发级别。
CONCUR_UPDATABLE
结果介可更新,但只能提供受限的并发级别。

3、主要方法:
●boolean previous()
●boolean first()
●boolean last()
●void beforFirst()
将游标移到第一行之前
●void afterLast()将游标移到最后一行之后
●boolean relative(int rows)相对于游标的当前位置将游标移动参数rows指定的行数,正数前负后。
●boolean absolute(int row)将游标移动到参数row指定的数据行 rows为正从结果集的开始向前,负从结果集的末尾向后,为零移到第一行之前。
判断游标当前位置的方法“
● Boolean isBeforeFirst()如果游标位于第一行之前返回true.
●Boolean isAfterLast() 最后一行之后
●boolean isFirst()
●boolean isLast()


 
三、可更新结果集
1、特点:可更新结果集的数据并将这些更新保存到数据库中。
2、创建方式:
a.Statement:createStatement(int resultSetType,int reslutSetConcurrency)
b.PrepareStatement:prepareStatement(String sql,int resultSetType,int reslutSetConcurrency)
c.CallableStatement:prepareCall(String sql,int resultSetType,int reslutSetConcurrency)
reslutSetConcurrency为CONCUR_UPDATABLE
3、主要方法
更新有两种方式,第一种方式是更新当前数据行的数据,如:
       rs.absolute(5); // 移动rs指针至第5行数据
       rs.updateString("NAME", "daniel"); // 将该行name列的值更新为“daniel”
       rs.updateRow(); //更新数据源的数据
第二种方式是插入一行数据,如:
       rs.moveToInsertRow(); // 将指针移动至插入行,插入行是ResultSet对象中的特殊行
       rs.updateString(1, 2); // 更新插入行中第一列的值为2
       rs.updateInt(2, "daniel"); // 更新第二列中的值为daniel
       rs.insertRow();
       rs.moveToCurrentRow(); //将指针移动至插入之前的位置
分享到:
评论

相关推荐

    Jsp开发遇到的70个问题及解决方法记录

    此外,还有其他方法如`isFirst()`, `isBeforeFirst()`, `isLast()`, `isAfterLast()`等用于判断当前位置。 ### 14. 禁止页面缓存 - **问题描述**:如何在HTML头部设置禁止页面被缓存。 - **解决方案**:可以在HTML...

    JAVA的70各问题

    14. 获取游标位置:在处理结果集`ResultSet`时,`getRow()`返回当前行数,`isFirst()`、`isBeforeFirst()`、`isLast()`和`isAfterLast()`用于判断当前位置。 15. 禁止表单后退显示过期:设置响应头禁止缓存,如在...

    只进结果集不支持请求的操作的“解决方法

    例如,可以使用`ResultSet.isBeforeFirst()`、`ResultSet.isAfterLast()`、`ResultSet.isFirst()`、`ResultSet.isLast()`等方法来判断当前状态。 3. **异常处理**:添加适当的异常处理逻辑,确保程序在遇到这类问题...

    ThinkPHP+EasyUI之ComboTree中的会计科目树形菜单实现方法

    假设数据库中会计科目数据表的字段为:id,code,name,islast。分别为自增主键,科目编码,科目名称,是否为末级(“1″表示末级科目)。 这里在Thinkphp的模型层中使用递归来构建ComboTree所需的数据,代码及注解如下:...

    object-flatten:根据谓词函数展平嵌套对象

    import flatten , { isLast } from 'object-flatten'const flattened = flatten ( isLast , { margin : { auto : { marginLeft : 'auto' , marginRight : 'auto' } }} ) 这将返回一个展平的对象: { 'margin.auto' ...

    c语言链表解析.pdf

    为了解决这些问题,可以引入一个标志节点,即表头节点,使得操作更加灵活且避免错误。 为了实现这些功能,通常会把类型声明和函数原型放在`.h`头文件中,具体实现放在`.c`文件中。例如,`List`类型是一个指向`Node`...

    从mysql转换到oracle数据库.docx

    这样可以避免在 Oracle 数据库中出现问题。 二、对表的修改 在将 MySQL 表结构导出到 Oracle 数据库之前,我们需要对表结构进行修改。具体来说,有以下几点需要注意: 1. 去掉``,这是 MySQL 的特殊标示符。 2. ...

    java面试题

    14. **游标位置**:在处理结果集(ResultSet)时,可以使用`getRow()`方法获取当前行数,以及`isFirst()`, `isBeforeFirst()`, `isLast()`, `isAfterLast()`来判断当前位置。 15. **防止表单后退显示过期页面**:...

    Objective-c对象组装XML

    if (node.isLast) { NSString *res = [[NSString alloc]initWithFormat:@"<%@>%@</%@>", node.nodeName, node.nodeValue, node.nodeName]; [str appendString:res]; [res release]; }else{ NSMutableString...

    超快下载导出系统报表页面数据.docx

    本文将详细介绍一种高效的报表数据导出方案,该方案通过使用CSV格式快速下载大量数据,并结合Excel的数据导入功能来解决数据格式和精度问题。此外,还将介绍如何通过Java中的JdbcTemplate实现这一方案的核心逻辑。 ...

    mysql转换到oracle数据库

    - **原因**:由于MySQL与Oracle数据库之间的语法差异较大,一次性导出后直接进行转换可能会导致较多问题。因此,通常会采取先分别导出表结构与数据的方式,再进行转换。 - **操作步骤**:首先仅导出表结构,对其...

    MyBatis分页插件.zip

    MyBatis分页插件的出现,正是为了解决这一问题。 在MyBatis中实现分页查询,一般有两种方式:手动分页和使用插件。手动分页需要开发者自己编写SQL语句,计算offset和limit,这种方式繁琐且容易出错。而MyBatis分页...

    70个Java面试题含答案.pdf

    在处理结果集(ResultSet)时,`getRow()`方法返回当前行数,`isFirst()`, `isBeforeFirst()`, `isLast()`, `isAfterLast()`等方法用于判断游标位置。 15. **防止表单回退显示过期**: 设置HTTP响应头来禁止页面...

    一个实用的JSP分页代码

    在Java Web开发中,JSP(JavaServer Pages)经常用于创建动态网页,而分页是大型数据集展示中常见的需求,它可以提高用户体验,避免一次性加载大量数据导致的性能问题。本话题将详细介绍如何实现一个实用的JSP分页...

    android数据库操作

    在Android开发中,数据库操作是一个重要的组成部分,特别是对于存储和检索应用程序数据的需求。...在实际项目中,我们还需要考虑数据的同步、线程安全以及性能优化等问题,确保数据库操作的稳定和高效。

    java(20211007021206).pdf

    在处理数据库结果集(ResultSet)时,`getRow()`方法可以获取当前指针所在行数,还有`isFirst()`, `isBeforeFirst()`, `isLast()`, `isAfterLast()`等方法来判断游标位置。 15. **防止表单后退显示过期页面**: ...

    java面试题大全宝典

    游标用于在结果集上进行迭代,通过 `isLast()` 方法可以检查是否已到达结果集的末尾。 查询 SQL 语句的完整执行过程通常涉及以下步骤: 1. 加载 JDBC 驱动。 2. 创建 `Connection` 对象,连接数据库。 3. 创建 `...

    java(20210925002359)[参考].pdf

    14. **游标位置**:在处理数据库结果集时,`ResultSet`对象提供了诸如`getRow()`、`isFirst()`、`isBeforeFirst()`、`isLast()`和`isAfterLast()`等方法来获取或判断当前游标的位置。 15. **防止表单回退显示过期**...

Global site tag (gtag.js) - Google Analytics