`

ResultSet may only be accessed in a forward direct

阅读更多

源码:

Query query = session.createQuery(hql);

  if(firstindex!=-1&&maxresult!=-1){
   query.setFirstResult(firstindex);
   query.setMaxResults(maxresult);
  }  
  List<T> temp = query.list();
  qr.setResultList(temp);
  qr.setTotalrecord(temp.size());

 

报错:

org.hibernate.exception.GenericJDBCException: could not execute query
 at org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:103)
 at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:91)
 at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
 at org.hibernate.loader.Loader.doList(Loader.java:2148)
 at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2029)
 at org.hibernate.loader.Loader.list(Loader.java:2024)
 at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:375)
 at org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:308)
 at org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:153)
 at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1106)
 at org.hibernate.impl.QueryImpl.list(QueryImpl.java:79)
 at com.util.db.BaokuQuery.getScrollData(BaokuQuery.java:31)
 at com.baokubiz.systemset.account.logic.implement.AccountServiceImpl.findByNameAndCid(AccountServiceImpl.java:852)
 at com.baokubiz.systemset.account.controllers.AccountOSAction.accountlist_unsort(AccountOSAction.java:1984)
Caused by: java.sql.SQLException: ResultSet may only be accessed in a forward direction.
 at net.sourceforge.jtds.jdbc.JtdsResultSet.checkScrollable(JtdsResultSet.java:316)
 at net.sourceforge.jtds.jdbc.JtdsResultSet.absolute(JtdsResultSet.java:713)

 

原因:

query.setFirstResult(firstindex);
query.setMaxResults(maxresult);
在sqlserver中,firstindex\maxresult两个参数不能为负数。

参考资料:http://www.iteye.com/post/153764


修改方案:

Query query = session.createQuery(hql); 

  if(firstindex>=0&&maxresult>=0){
   query.setFirstResult(firstindex);
   query.setMaxResults(maxresult);
  }  
  List<T> temp = query.list();
  qr.setResultList(temp);
  qr.setTotalrecord(temp.size());

1
0
分享到:
评论

相关推荐

    HIBERNATE4开发文档,HIBERNATE4的变化

    - Hibernate4中,如果你在进行分页查询时遇到“ResultSet may only be accessed in a forward direction”的错误,这是因为结果集默认只能向前滚动。为了解决此问题,可以在Hibernate配置中设置`jdbc.use_...

    ResultSet

    8. 游标属性:可以通过设置Statement的游标属性(如CONCUR_READ_ONLY和CONCUR_UPDATABLE)来控制ResultSet是否可滚动和更新。默认情况下,ResultSet是只读且不可滚动的。 9. 非滚动与滚动ResultSet:非滚动...

    jdbc学习文档

    6. **关闭资源**:最后关闭Statement、ResultSet和Connection对象。 **1.4 QuickStart示例** 示例代码展示了如何使用JDBC连接数据库并执行查询操作: ```java // 加载MySQL数据库驱动 Class.forName(...

    javaResultSet常用方法.pdf

    其中,resultSetType指定ResultSet的类型,可以是ResultSet.TYPE_FORWARD_ONLY、ResultSet.TYPE_SCROLL_INSENSITIVE或ResultSet.TYPE_SCROLL_SENSITIVE之一。resultSetConcurrency指定ResultSet的并发类型,可以是...

    ResultSet 转为listmap

    ResultSet 转为 List ResultSet 转为 List&lt;Map&gt; 是一种常见的数据处理操作。在 Java 中,使用 JDBC 连接数据库时,通常会返回一个 ResultSet 对象,该对象包含了查询结果集的所有记录。为了方便数据处理和使用,...

    java数据库连接ResultSet

    ResultSet r = stmt.executeQuery("SELECT a, b, c FROM Table1"); ``` 然后,可以使用 while 循环来遍历 ResultSet 中的每一行,并使用 get 方法来访问当前行中的数据: ```java while (r.next()) { int i = r....

    支持ResultSet的JTable

    5. **将ResultSet转换为TableModel**:为了让`JTable`能显示`ResultSet`的数据,我们需要将`ResultSet`的内容转换为`TableModel`。这通常涉及到遍历`ResultSet`,获取列名和值,然后添加到`TableModel`中。 6. **...

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

    ### ResultSet对象获取数据的各种方法 在Java编程语言中,`ResultSet`对象是处理数据库查询结果的核心组件之一。它充当一个可滚动的、可更新的数据表,用于存储从数据库执行SQL语句后返回的结果集。本文将详细介绍...

    ResultSet用法集锦

    - `TYPE_FORWARD_ONLY`:只能向前滚动,这是默认类型。 - `TYPE_SCROLL_INSENSITIVE`:可以前后滚动,但对数据库的修改不敏感。 - `TYPE_SCROLL_SENSITIVE`:可以前后滚动,并对数据库的修改敏感。 7. `ResultSet`...

    java resultset常用方法

    - **resultSetType**:定义ResultSet的类型,可以是`ResultSet.TYPE_FORWARD_ONLY`、`ResultSet.TYPE_SCROLL_INSENSITIVE`或`ResultSet.TYPE_SCROLL_SENSITIVE`。 - **resultSetConcurrency**:定义ResultSet的并发...

    ResultSet转化为json,json转化为List

    在Java编程中,数据处理是核心任务之一,而ResultSet、JSON和List是处理数据时常见的三种数据结构。ResultSet是数据库查询结果的载体,JSON是一种轻量级的数据交换格式,而List是Java集合框架中的动态数组。本文将...

    JAVA 版本ResultSet 转换为JAVABEAN的工具类

    在Java编程中,ResultSet是处理数据库查询结果的主要接口,它由Statement或PreparedStatement对象执行SQL查询后返回。而JavaBean是一种符合特定规范的Java类,通常用于封装数据,便于数据的传输和操作。当我们从...

    java 项目中遇到的错误

    Unknown column 'fillMen' in 'field list' java.sql.SQLException: Operation not ...java.sql.SQLException: QueryRunner requires a DataSource to be invoked in this way, or a Connection should be passed in

    ResultSet的属性

    ResultSet是Java数据库连接(JDBC)中的一个重要接口,它用于存储和检索数据库查询结果。当执行SQL查询后,结果会被封装成ResultSet对象,允许我们逐行遍历并访问查询返回的数据。在处理ResultSet时,了解其属性和元...

    poi根据ResultSet到处Excle源码

    标题中的“poi根据ResultSet到处Excle源码”指的是使用Java的Apache POI库将数据库查询结果(ResultSet)转换为Excel文件的过程。Apache POI是一个流行的API,它允许开发者读写Microsoft Office格式的文件,包括...

    如何从 Java 存储过程将 JDBC ResultSet 作为 Ref Cursor 返回.doc

    尽管如此,从REF CURSOR到ResultSet的逆向映射仍然不被支持,这意味着在当前版本中,你无法将REF CURSOR作为IN或IN OUT参数传递给Java存储过程。 为了从Java存储过程返回一个ResultSet作为REF CURSOR,需要特别处理...

    resultset2xml

    在IT行业中,数据库查询结果通常以ResultSet对象的形式返回,它是一种存储查询结果的接口,源自Java的JDBC(Java Database Connectivity)API。当需要将这些数据转换为XML格式时,以便于数据交换、存储或进一步处理...

    ResultSet剖析

    - `resultSetType`:设置`ResultSet`的滚动模式,`ResultSet.TYPE_FORWARD_ONLY`表示仅支持前向滚动,`ResultSet.TYPE_SCROLL_INSENSITIVE`和`ResultSet.TYPE_SCROLL_SENSITIVE`则允许双向滚动,区别在于后者对数据...

    jsp 三种查询分页 resultset,hibernate ,存储过程

    jsp 三种查询分页 resultset,hibernate ,存储过程jsp 三种查询分页 resultset,hibernate ,存储过程jsp 三种查询分页 resultset,hibernate ,存储过程jsp 三种查询分页 resultset,hibernate ,存储过程

    Java ResultSet导出大数据.docx

    Java的PreparedStatement接口允许我们设置游标类型和获取结果集的方式,例如设置为ResultSet.TYPE_FORWARD_ONLY和ResultSet.CONCUR_READ_ONLY,这可以防止数据被一次性加载到内存。同时,通过调用setFetchSize方法...

Global site tag (gtag.js) - Google Analytics