问题:
在分页时,常因为是新手会出现如下的问题:
com.microsoft.sqlserver.jdbc.SQLServerException: 只进结果集不支持请求的操作。
at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDriverError(Unknown Source)
at com.microsoft.sqlserver.jdbc.SQLServerResultSet.throwNotScrollable(Unknown Source)
at com.microsoft.sqlserver.jdbc.SQLServerResultSet.verifyResultSetIsScrollable(Unknown Source)
at com.microsoft.sqlserver.jdbc.SQLServerResultSet.absolute(Unknown Source)
at org.apache.tomcat.dbcp.dbcp.DelegatingResultSet.absolute(DelegatingResultSet.java:335)
at com.rsglxt.db.ManageDB.getImpList(ManageDB.java:78)
at com.rsglxt.manage.ImpleeyListAction.getImpList(ImpleeyListAction.java:199)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at ognl.OgnlRuntime.invokeMethod(OgnlRuntime.java:517)
at ognl.OgnlRuntime.getMethodValue(OgnlRuntime.java:931)
at ognl.ObjectPropertyAccessor.getPossibleProperty(ObjectPropertyAccessor.java:53)
at ognl.ObjectPropertyAccessor.getProperty(ObjectPropertyAccessor.java:121)
at com.opensymphony.xwork2.util.OgnlValueStack$ObjectAccessor.getProperty(OgnlValueStack.java:58)
at ognl.OgnlRuntime.getProperty(OgnlRuntime.java:1643)
at com.opensymphony.xwork2.util.CompoundRootAccessor.getProperty(CompoundRootAccessor.java:101)
at ognl.OgnlRuntime.getProperty(OgnlRuntime.java:1643)
at ognl.ASTProperty.getValueBody(ASTProperty.java:92)
at ognl.SimpleNode.evaluateGetValueBody(SimpleNode.java:170)
at ognl.SimpleNode.getValue(SimpleNode.java:210)
at ognl.Ognl.getValue(Ognl.java:333)
at ognl.Ognl.getValue(Ognl.java:310)
…………
…………
…………
…………
解决方法:
因为在创建stmt容器的时候,没有加上如下红色的参数:
stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);
其意为创建一个滚动的结果集,相信大家看参数的英文意思,也能明白啦,scroll=滚动
如果没有加上这个参数,那么这个结果集就只能迭代一次,就不能rs.XXXX调用ResultSet下的某些方法了
这也是程序中抛出的异常:说结果集只进的原因了!!!
分享到:
相关推荐
### 只进结果集不支持请求的操作的解决方法 在数据库操作中,有时会遇到一些异常情况,比如尝试对一个不支持滚动(scroll)或某些特定操作的结果集进行操作时,系统可能会抛出异常。本篇文章将针对此类问题提供详细...
具体而言,当使用`setFirstResult()`和`setMaxResults()`方法对查询结果集进行限制时,如果结果集被标记为只进(forward-only),则不支持这些操作,从而引发异常。这是因为只进结果集是为了提高性能而设计的,它...
5. **处理第一个结果集**:通过SqlDataReader的Read方法逐行读取第一个结果集。如果需要访问列值,可以使用Get方法,如GetInt32、GetString等,指定列的索引。通常,我们会在一个循环中处理这些行,直到Read返回...
- 客户端游标:在客户端缓存整个结果集,仅支持只进和静态游标,所有操作都在客户端完成,不支持其他类型的游标。 3. 游标的生命周期 游标的生命周期包括声明、打开、读取数据、关闭和释放五个阶段。声明游标定义...
API客户端游标则将整个结果集缓存在客户端,仅支持只进和静态游标,不支持滚动和其他类型。 游标的生命周期包括声明、打开、读取数据、关闭和释放五个阶段。声明游标定义了游标的属性和SELECT语句,打开游标执行...
除了上述两种方法,C#还提供了其他数据库操作方式,如使用SqlDataAdapter和DataSet进行填充数据集,或者使用Entity Framework这样的ORM框架进行更高级别的数据操作。不过,SqlDataReader和存储过程是数据库操作的...
这种方法允许在内存中存储整个结果集,便于离线处理数据,但不适合处理大数据集。 3. **使用SqlCommand对象和ExecuteNonQuery/ExecuteScalar**: - `ExecuteNonQuery()`用于执行非查询操作,如INSERT、UPDATE、...
4. **数据查询**:查询数据库通常使用SELECT语句,可以通过SqlCommand的ExecuteReader方法获取结果集。DataReader对象是一个只进型数据流,适用于处理大量数据。对于更复杂的数据操作,可以使用SqlDataAdapter填充...
DataReader是数据库查询结果的只进流,它能高效地按需读取一行接一行的数据,但不支持随机访问。使用DataReader时,通常会配合使用using语句块以确保在完成后关闭数据流。 数据集(DataSet)是离线数据存储的一个...
7. 阅读器(SqlDataReader):SqlDataReader提供一种只进的、快速的流式访问数据库结果集的方式。它用于处理大量数据,因为不需要一次性加载所有数据到内存。 8. 存储过程:在C#中,可以通过SqlCommand调用SQL ...
5. **数据读取器**: `SqlDataReader`是一个只进型流式数据读取器,用于高效地逐行读取数据库结果集。适用于大量数据的读取,但不支持数据修改。 6. **事务处理**: 通过`Transaction`对象,可以在C#中实现数据库事务...
8. 数据读取器(DataReader):DataReader是一个只进型数据流,用于高效地读取数据库中的数据,但不支持离线操作。相比于DataSet,它占用更少的内存,适合处理大量数据。 9. 数据库IO操作:本项目中,C#的数据库IO...
- **游标支持**:允许前后移动结果集,支持只读、只进、可滚动等多种模式。 - **事务管理**:支持JDBC的事务隔离级别,如READ UNCOMMITTED、READ COMMITTED、REPEATABLE READ和SERIALIZABLE。 - **类型映射**:将...
例如,可以使用Command对象的ExecuteNonQuery()方法执行插入或更新操作,ExecuteReader()方法获取查询结果。而在离线操作中,数据先被加载到DataSet中,然后在应用程序内部处理,不直接与数据库交互,直到需要时才...
下面将详细介绍C#中数据库操作的基础知识,包括连接数据库、执行SQL语句、处理结果集等关键概念。 首先,C#通过ADO.NET(.NET Framework的一部分)框架来实现对数据库的操作。ADO.NET提供了一套完整的组件和服务,...
SqlDataReader是一种只进的、不可滚动的结果集,适合处理大量数据。 了解并熟练使用SqlConnection对象,是进行.NET数据库编程的基础。通过合理地创建、打开、关闭和管理连接,以及配合SqlCommand和SqlDataReader...
适用于只需一次遍历记录集且不需要反复定位记录的简单操作。 在ASP中定义记录集打开的游标类型,可以通过以下代码实现: ```vbscript Dim conn As New ADODB.Connection Dim rs As New ADODB.Recordset conn.Open...
4. SqlDataReader:当执行查询时,通常会使用SqlDataReader来读取结果集。这是一个只进、只读的数据流,可以逐行读取数据,提高性能。 5. SqlDataAdapter:在需要将数据填充到DataSet或DataTable时,DataAdapter...
数据集不直接与数据库交互,而是通过数据适配器(DataAdapter)填充,它可以容纳多个DataTable,每个DataTable代表一个表格。 读取XML文件到数据集的步骤如下: 1. 引入必要的命名空间: 首先,你需要引入System....
它非常适合处理大量数据,因为它不需要在内存中保留整个结果集。在`Read()`方法中,通过SqlDataReader遍历查询结果并填充DataTable。 4. **DataSet和SqlDataAdapter**: 这两者配合使用,可以实现离线数据处理,即断...