`
xudongcsharp
  • 浏览: 480307 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

ResultSet isLast()

    博客分类:
  • Java
 
阅读更多
在遍历结果集的时候,用rs.isLast()来判断是否到达最后一条,结果报出异常:
java.sql.SQLException: Invalid operation for forward only resultset : isLast


解决方法是:
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(); //将指针移动至插入之前的位置
分享到:
评论

相关推荐

    ResultSet对象获取数据的各种方法

    - `boolean isLast()`:判断是否在最后一行。 这些方法允许我们灵活地移动`ResultSet`对象中的光标位置,以便进行数据检索或更新操作。 #### 3. ResultSet对象数据获取方法 `ResultSet`提供了多种方法来根据不同...

    javaResultSet常用方法.pdf

    * rs.isLast():判断光标是否在最后一行 * rs.isBeforeFirst():判断光标是否在第一行之前 * rs.isAfterLast():判断光标是否在最后一行之后 Java ResultSet提供了多种方法来处理查询结果,使得开发者可以灵活地...

    java resultset常用方法

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

    ResultSet常用方法

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

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

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

    Java间隔指定记录数获取数据库中的数据

    resultSet.isLast()) { offset += batchSize; } else { break; // 没有更多数据 } resultSet.close(); } ``` 以上代码将分批获取`table`表的数据,每次获取50条,直到没有更多数据为止。注意,这个示例假设...

    JDBC2.0新功能

    `ResultSet.getRow()`返回当前行号,而`isFirst()`, `isLast()`, `isBeforeFirst()`, `isAfterLast()`则用于检测光标位置。 2. **可更新结果集**: JDBC 2.0引入了可更新结果集,开发者可以直接使用Java方法而非...

    从mysql转换到oracle数据库.docx

    6. rs.isLast():当数据库为 MySQL 时,可以使用 `Connection.prepareStatement(str1)`,而在 Oracle 中必须使用 `Connection.prepareStatement(str1, ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_...

    jsp动态网站开发与实例之数据变动功能网页.pptx

    此外,还有`isAfterLast()`、`isBeforeFirst()`、`isFirst()`和`isLast()`来判断指针当前位置。ResultSet还提供了诸如`getString(int index)`、`getInt(int index)`等方法,用于获取特定列的数据,以及`deleteRow()`...

    jdbc2.0特性

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

    mysql转换到oracle数据库

    - **Oracle**:需要设置`ResultSet`的类型为`TYPE_SCROLL_INSENSITIVE`和`CONCUR_READ_ONLY`才能使用`isLast()`方法。 **7. 更新操作** - 在Oracle中,对于字符串中出现的单引号,需要进行转义处理,例如使用`...

    java面试题大全宝典

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

    Homework1-Cursor

    5. `isBeforeFirst()`,`isAfterLast()`,`isFirst()`,`isLast()`:检查游标当前所在的位置。 6. `getString(int columnIndex)`,`getInt(int columnIndex)`等:获取当前行指定列的数据。 **游标的移动策略:** ...

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

    public void processRow(ResultSet rs) throws SQLException { if (rs.isFirst()) { // 设置每次获取的行数 rs.setFetchSize(500); // 写入表头 for (int i = 0; i ().getColumnCount(); i++) { writeToFile...

    各种实现分页技术

    2. **JDBC分页**:利用ResultSet的getFirst(), getNext(), isLast()等方法,配合while循环实现分页。这种方式灵活性较高,但效率较低,因为需要先获取所有数据再进行分页。 3. **JSTL标签库**:JSTL(JavaServer ...

    JAVA的70各问题

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

    java面试题

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

Global site tag (gtag.js) - Google Analytics