`

对只转发结果集的无效操作: 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.moveToCurrentRow(); 
分享到:
评论

相关推荐

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

    在数据库操作中,有时会遇到一些异常情况,比如尝试对一个不支持滚动(scroll)或某些特定操作的结果集进行操作时,系统可能会抛出异常。本篇文章将针对此类问题提供详细的解决方案,并通过分析具体的异常堆栈信息来...

    编译原理 求first集与follow集

    为了实现对First集与Follow集的计算,我们可以参考提供的部分代码片段。下面详细介绍算法的实现过程: ##### 3.1 数据结构设计 - `multimap, string> sentence;`:用于存储上下文无关文法的产生式。 - `multimap, ...

    编译原理实验 求first集和follow集 代码

    根据给定的信息,本文将详细解释如何通过编程方式计算上下文无关文法(Context-Free Grammar, CFG)中的First集和Follow集。First集是对于一个符号(非终结符),能够直接推导出的第一个符号(包括终结符和空串^)的...

    ResultSet常用方法

    - `rs.isLast()`:判断当前游标是否在结果集的最后一行。 - `rs.isBeforeFirst()`:判断当前游标是否在结果集的第一行之前。 - `rs.isAfterLast()`:判断当前游标是否在结果集的最后一行之后。 3. **可滚动性...

    javaResultSet常用方法.pdf

    1. ResultSet.TYPE_FORWARD_ONLY:指针只允许向前移动,不会受到其他用户对该数据库所作更改的影响。 2. ResultSet.TYPE_SCROLL_INSENSITIVE:指针可以前后移动,甚至可以进行特定定位,不会受到其他用户对该数据库...

    JDBC2.0新功能

    `moveToInsertRow()`用于开始插入操作,`insertRow()`将插入行添加到结果集并保存到数据库,而`deleteRow()`则用于删除当前行。 3. **事务隔离级别**: `Connection`对象提供了`setTransactionIsolation(int level...

    jdbc2.0特性

    1. **新的记录集接口(ResultSet 接口)**:ResultSet接口是JDBC中用于存储查询结果的对象,JDBC 2.0对其进行了扩展,添加了更多的常量和方法来增强其功能。 - **常量定义**: - `FETCH_FORWARD`:指定默认的行处理...

    java resultset常用方法

    - `rs.isLast()`:判断光标是否位于结果集的最后一行。 - `rs.isBeforeFirst()`:判断光标是否位于结果集的第一行之前。 - `rs.isAfterLast()`:判断光标是否位于结果集的最后一行之后。 ##### 3. 更新数据相关方法...

    Android技术与应用(数据库)

    除了这四种操作外,还有一项重要的任务是处理查询结果集(Recordset),即如何遍历查询结果并从中提取所需的信息。 ##### 3.2 SQLite数据库API 在Android中,核心的SQLite数据库API包括`SQLiteDatabase`类及其相关...

    dataset中自动序号实现

    在IT领域,特别是数据库管理和应用开发中,对数据集(dataset)进行操作是十分常见的需求之一。其中,为数据记录自动生成序号是一项基础而重要的功能。本文将根据提供的文件信息,详细介绍如何在数据集中实现自动...

    android连接数据库.pdf

    `requery()`用于重新执行查询,`isAfterLast()`、`isBeforeFirst()`、`isFirst()`和`isLast()`则用于判断指针的位置,`moveToFirst()`、`moveToLast()`和`moveToNext()`则帮助在结果集中移动。 最后,`...

    android数据库操作

    在Android开发中,数据库操作是一个重要的组成部分,特别是对于存储和检索应用程序数据的需求。SQLite是Android系统默认支持的关系型数据库,它轻量级且高效,非常适合移动设备。本文将详细介绍如何在Android中进行...

    sqlite 详细资料

    下面是对 SQLite 的详细介绍: 数据库连接 Android 中使用 SQLite 数据库,所有相关的接口和类都在 android.database 和 android.database.sqlite 两个包下。其中,SQLiteOpenHelper 是一个抽象类,提供了创建和...

    Axure符号说明

    **isFirst/isLast:** 分别用于判断数据行是否为第一行或最后一行。 **isEven/isOdd:** 判断数据行是否为偶数行或奇数行。这些条件经常用于样式化或格式化目的。 **isMarked:** 判断数据行是否被标记。此功能可...

    JAVA的70各问题

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

Global site tag (gtag.js) - Google Analytics