在遍历结果集的时候,用rs.isLast()来判断是否到达最后一条,结果报出异常:
Java代码
java.sql.SQLException: Invalid operation for forward only resultset : isLast
解决方法是:
Java代码
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(); //将指针移动至插入之前的位置
分享到:
相关推荐
* rs.isLast():判断光标是否在最后一行 * rs.isBeforeFirst():判断光标是否在第一行之前 * rs.isAfterLast():判断光标是否在最后一行之后 Java ResultSet提供了多种方法来处理查询结果,使得开发者可以灵活地...
- `rs.isLast()`:判断当前游标是否在结果集的最后一行。 - `rs.isBeforeFirst()`:判断当前游标是否在结果集的第一行之前。 - `rs.isAfterLast()`:判断当前游标是否在结果集的最后一行之后。 3. **可滚动性...
- `rs.isLast()`:判断光标是否位于结果集的最后一行。 - `rs.isBeforeFirst()`:判断光标是否位于结果集的第一行之前。 - `rs.isAfterLast()`:判断光标是否位于结果集的最后一行之后。 ##### 3. 更新数据相关方法...
6. rs.isLast():当数据库为 MySQL 时,可以使用 `Connection.prepareStatement(str1)`,而在 Oracle 中必须使用 `Connection.prepareStatement(str1, ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_...
writeToFile(pw, rs.getMetaData().getColumnName(i + 1), i == rs.getMetaData().getColumnCount() - 1); } } else { // 写入数据 for (int i = 0; i < rs.getMetaData().getColumnCount(); i++) { ...
(rs.isLast()) { %> 已经是最后一页 <a href="?pageNo=<%= pageNo + 1 %>">下一页 ``` 通过上述方法,你可以实现一个简单的分页系统,使用户能够轻松浏览大量的数据库记录。然而,实际项目中可能需要考虑更...
例如,可以使用`ResultSet.isBeforeFirst()`、`ResultSet.isAfterLast()`、`ResultSet.isFirst()`、`ResultSet.isLast()`等方法来判断当前状态。 3. **异常处理**:添加适当的异常处理逻辑,确保程序在遇到这类问题...
- **MySQL**:可以直接使用`PreparedStatement`对象调用`rs.isLast()`方法。 - **Oracle**:需要设置`ResultSet`的类型为`TYPE_SCROLL_INSENSITIVE`和`CONCUR_READ_ONLY`才能使用`isLast()`方法。 **7. 更新操作*...
- `boolean isLast()`:判断是否在最后一行。 这些方法允许我们灵活地移动`ResultSet`对象中的光标位置,以便进行数据检索或更新操作。 #### 3. ResultSet对象数据获取方法 `ResultSet`提供了多种方法来根据不同...
if (node.isLast) { NSString *res = [[NSString alloc]initWithFormat:@"<%@>%@</%@>", node.nodeName, node.nodeValue, node.nodeName]; [str appendString:res]; [res release]; }else{ NSMutableString...
resultSet.isLast()) { offset += batchSize; } else { break; // 没有更多数据 } resultSet.close(); } ``` 以上代码将分批获取`table`表的数据,每次获取50条,直到没有更多数据为止。注意,这个示例假设...
datasetplxd.isLast())`表示当未到达数据集的末尾时,继续执行循环体内的操作。 2. **条件判断**:`if(datasetplxd.getValue("select"))`检查“select”字段是否满足一定条件,如果满足,则执行后续操作。 3. **插入...
dataset_mainMenuTemp.isLast()) { // 循环遍历所有记录 var record = dataset_mainMenuTemp.getCurrent(); // 获取当前记录 var node = new RecordTreeNode(record, rootNode.getTreeLevel().getTreeLevel("level...
- 在处理结果集`ResultSet`时,`rs.getRow()`返回当前行数,`isFirst()`, `isBeforeFirst()`, `isLast()`, `isAfterLast()`可判断游标所处的位置。 15. **防止表单后退显示过期页面**: - 设置响应头来禁止浏览器...
在处理数据库查询结果时,`ResultSet`对象提供了多个方法来确定当前行的位置,如`int row = rs.getRow()`用于获取当前行索引,`isFirst()`、`isBeforeFirst()`、`isLast()`和`isAfterLast()`用于判断当前行是否位于...
在处理结果集(ResultSet)时,`getRow()`方法返回当前行数,`isFirst()`, `isBeforeFirst()`, `isLast()`, `isAfterLast()`等方法用于判断游标位置。 15. **防止表单回退显示过期**: 设置HTTP响应头来禁止页面...
在处理数据库结果集(ResultSet)时,`getRow()`方法可以获取当前指针所在行数,还有`isFirst()`, `isBeforeFirst()`, `isLast()`, `isAfterLast()`等方法来判断游标位置。 15. **防止表单后退显示过期页面**: ...