`
sslaowan
  • 浏览: 380437 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

关于VO读取记录

阅读更多

 

getRowCount()
          Counts the total number of rows in this row set.

     计算这个行集的行总数

This method retrieves all rows from the View Object by executing the View Object's query and then calling next() until the last row is retrieved. Thus, since it iterates through the View Object one record at a time, this method may be slow.

该方法通过执行视图对象的查询从视图对象中获取所有行,然后调用next()直到最后一行被调用。于是,由于它通过视图对象一次迭代一条记录,因此该方法是比较慢的。

If you are working with a large number of rows, or if your application demands a fast response, use getEstimatedRowCount to obtain a quicker count.

如果你操作一大堆行,或者你的应用需要一个快速的响应,使用getEstimatedRowCount获得一个更快的数量。

The following sample code uses getRowCount() to set up separate iterators for even numbered and odd numbered rows:

下面的代码使用getRowCount()为基数和偶数行创立独立的迭代器。

 // Default iterator gets even-numbered rows.
 // Second iterator gets odd-numbered rows.
 long nRows = vo.getRowCount();
 String msg = "";
 for (int i = 0; i < nRows; i +=2) {
 
       // Get and set row index values relative to a range.
       // Index of first row = 0.
       vo.setCurrentRowAtRangeIndex(i);
       Row currRow = vo.getCurrentRow();
       msg = "  Default iterator (even): " + vo.getRangeIndexOf(currRow);
       printRow(currRow, msg);
 
       secondIter.setCurrentRowAtRangeIndex(i + 1);
       currRow = secondIter.getCurrentRow();
       msg = "  Second iterator (odd): " + vo.getRangeIndexOf(currRow);
       printRow(secondIter.getCurrentRow(), msg);
    }

 

getRowCountInRange()
          Counts the rows actually in the range.

     计算范围内的实际行数

getRowCountInRange() int
          Gets the size of the current
RowSet's range

获得当前RowSet(记录集)的范围大小。

getFetchedRowCount() int
          Counts the number of rows fetched from the JDBC result set.

     计算从JDBC结果集抓取的行数。

This method delegates to the default RowSetIterator.

This method can be used to determine whether the View Object has read all the rows from the cursor. For example, getEstimatedRowCount returns an equivalent of count(*) on the View Object. The getFetchedRowCount() method returns the count of rows already fetched. If getFetchedRowCount() returns a value less than getEstimatedRowCount(), then the View Object has not read all rows from the cursor.

该方法被用于确定视图对象是否从游标中读取所有的行。例如,getEstimatedRowCount返回视图对象上count(*)相等的量。getFetchedRowCount()方法只返回已经抓取的行数。如果getFetchedRowCount()返回的值小于getEstimatedRowCount(),那么视图对象没有从游标中读到所有行。

 

getEstimatedRowCount

    Makes an estimated count of the rows in this row set.

This method estimates the number of rows in the row count by calling getQueryHitCount (which performs a SELECT COUNT (*) FROM table). Internal logic in Business Components for Java keeps the EstimatedRowCount up-to-date as rows are inserted and removed. Thus, after the first call to this method, it can return the estimated count quickly.

For example:

 // Get the rowcount again because of deleted or inserted row

 rowCount = (int) iter.getRowSet().getEstimatedRowCount();

 

If you are working with a large number of rows, or if your application demands a fast response, use this method instead of getRowCount.

Note however, that this method might not be as accurate as getRowCount().

注意:但是,这个方法可能没有getRowCount准确。

To test whether the View Object has read all the rows from the cursor, you can use getEstimatedRowCount() in conjunction with getFetchedRowCount(). For example, getEstimatedRowCount() returns an equivalent of count(*) on the View Object. The getFetchedRowCount method returns the count of rows already fetched. If getFetchedRowCount() returns a value less than getEstimatedRowCount(), then the View Object has not read all rows from the cursor.

 

getFetchSize()
          Gets the row pre-fetch size.

     获得行的预先抓取大小

     The framework will use this value to set the JDBC row pre-fetch size. Note that the row pre-fetch size has performance ramifications. A larger fetch size is more expensive in terms of memory usage than a smaller size. The default fetch size is 1 row.

框架将使用这个值去设定JDBC行预抓取大小。注意行预抓取大小影响性能。比较大的抓取大小就内存使用而言比小的抓取大小要更昂贵。 默认的抓取大小是一行。

If the value of setFetchMode(byte) is FETCH_ALL, then the value of setFetchSize is disregarded.

如果setFetchMode的值是FETCH_ALL,setFetchSize将被忽略。

For each View Object, this method is customizable. Deciding what value to use could be made at runtime based on how many rows are expected for a particular View Object.

对于每个视图对象,这种方法是可定制的。可以在运行时基于一个特定视图对象预期的行数决定使用什么值进行设定。

 

getRangeSize()
          Returns the range size of the iterator.

    获得迭代器的范围大小。

 

测试代码:

PerAllPeopleVOImpl employerInstance=(PerAllPeopleVOImpl) this.getPerAllPeopleVO1();
     int fetchedRowCount=employerInstance.getFetchedRowCount();
     int rowCount=employerInstance.getRowCount();
     int rowCountInRange=employerInstance.getRowCountInRange();
     long estimatedRowCount= employerInstance.getEstimatedRowCount();
     int rangeSize=employerInstance.getRangeSize();
     int fetchSize=employerInstance.getFetchSize();
     int allRowLength=employerInstance.getAllRowsInRange().length;  
    
 

    int employerCount=0;
     while(employerInstance.hasNext())
     {
        PerAllPeopleVORowImpl eachEmployer= (PerAllPeopleVORowImpl)employerInstance.next();
        String empName= eachEmployer.getLastName();
        employerCount++;
     }

   

    logInfo("fetchedRowCount is "+fetchedRowCount);
     logInfo("rowCount is "+rowCount);
     logInfo("rowCountInRange is "+rowCountInRange);
     logInfo("estimatedRowCount is "+estimatedRowCount);
     logInfo("rangeSize is "+rangeSize);
     logInfo("fetchSize is "+fetchSize);
     logInfo("employerCount is "+employerCount);
     logInfo("allRowLength is "+allRowLength);
   

 

测试结果:

 

 fetchedRowCount is 0

 rowCount is 1001

 rowCountInRange is 1

 estimatedRowCount is 1001

 rangeSize is 1

 fetchSize is 1

 employerCount is 0

 allRowLength is 1

 

问题:

   实际数据库的记录数是:5 9924,distinct掉重复的person_id后,记录数是3 1113。

   在页面上会报出如下警告:警告 - 查询已超出 1000 行。可能存在更多的行,请限制查询。

 

   不知道是否与此设置有关。

 

 

关于next()方法:

  next() ROW
          Gets the next row in the iterator.

在迭代器中获得下一行

This method delegates to the default RowSetIterator. If this method is called on a row set that has not yet been executed, executeQuery() is implicitly called.

这个方法委托给默认的RowSetIterator。如果这个方法在行集还没有被执行的时候被调用,将隐式调用executeQuery

If the current row designation is to change, ViewRowImpl.validate() is called to validate the current row.

如果当前行的指定被改变,ViewRowImpl.validate()被调用验证当前行。

The row set has a "slot" before the first row, and one after the last row. When the row set is executed the iterator is positioned at the slot before the first row. If next() is invoked on a newly-executed row, the first row will be returned. If next() is called when the iterator is positioned on the last row of the row set, null is returned and the iterator is positioned at the slot following the last row.

行集在第一行之前,和最后一行之后都有一个“空位”。当行集被执行时,迭代器定位在第一行之前的空位。如果next()在一个新执行的行上被调用,第一行将返回。

If the iterator is at the last row of the range when next() is called, RowSetListener.rangeScrolled() is called to send ScrollEvent to registered RowSetListeners.

next()被调用时,如果迭代器在范围的最后一行,RowSetListener.rangeScrolled()被调用发送ScrollEvent到注册的RowSetListeners

When successful, this method fires a NavigationEvent to registered RowSetListeners, by calling RowSetListener.navigated(). The row returned is designated as the current row.

当成功的时候,该方法通过调用RowSetListener.navigated()触发NavigationEvent 。返回的行被标志为当前行。

 

分享到:
评论

相关推荐

    Java的(PO,VO,TO,BO,DAO,POJO)解释

    通过这些映射,O/R Mapper可以生成所有的关于对象保存、删除、读取的SQL语句,我们不再需要写那么多行的DAL代码了。 实体Model(实体模式) 实体Model是Java中的实体模式,用于描述业务模型的实体对象。 DAL(Data...

    Java的几种对象(PO-VO-DAO-BO-POJO)解释

    一个简单的PO对象可以代表数据库表中的一条记录,而多个记录则可以通过PO的集合来表示。需要注意的是,PO对象本身不应该包含任何数据库操作的行为或逻辑,它仅仅是用来存储数据的一种方式。例如: - **用途**:当...

    java术语(PO/POJO/VO/BO/DAO/DTO)

    PO对象通常直接对应数据库中的表结构,每个PO实例代表表中的一条记录。PO的主要任务是在业务层和数据层之间传递数据,但它不应包含任何对数据库的操作逻辑,这样的职责应当留给DAO层。 #### POJO (Plain Ordinary ...

    monocularVO_视觉里程计_视觉里程_Vo_

    5. **`main.cpp`**:这是项目的主程序入口,负责读取视频流或图像序列,实例化视觉里程计类,调用相应的函数进行处理,并可能显示或记录结果。在这里,用户可能需要提供输入数据的路径,设置参数,以及定义输出格式...

    NC65学习笔记.docx

    本文档是关于NC65学习笔记的总结,涵盖了NC65的代码结构规范、组件配置、VO代码结构、数据访问和持久化等方面的知识点。 一、代码结构规范 NC65的代码结构规范可以分为五个部分:nc.itf.&lt;模块&gt;、nc.impl.&lt;模块&gt;、...

    基于java中的PO VO DAO BO POJO(详解)

    持久对象直接映射到数据库中的表,代表数据库中的一条记录。PO的主要作用是作为数据库查询结果的载体,它通常包含了数据库表中的所有字段。PO对象不应该包含任何数据库操作的代码,因为它的职责仅仅是存储数据。当...

    java中的缩写

    PO,即持久化对象,主要用于表示数据库中某一行记录的映射。在ORM(Object-Relational Mapping)框架中,如Hibernate或MyBatis,PO对象扮演着连接实体数据模型与关系型数据库之间的桥梁角色。PO对象通常包含与数据库...

    词法分析器

    3. **标记化**:一旦找到一个符合规则的字符序列,就将其转化为一个标记,并记录下其类型和值。 4. **错误处理**:如果遇到不符合任何规则的字符序列,词法分析器需要能检测到错误,并给出相应的错误信息。 5. **...

    ADF应用程序样例

    - 添加按钮并关联VO中的方法,以实现创建、读取、更新和删除等功能。 - 运行页面查看效果。 5. **运行与测试**: - 运行页面,测试CRUD操作是否正常工作。 - 如果遇到问题,可以检查错误日志或调整代码。 ####...

    NCV6.5数据字典.rar

    例如,`CustomerVO`可能是顾客表的VO类,包含了创建、读取、更新、删除顾客信息的方法。开发者通过调用这些方法与数据库进行交互。 4. 枚举的定义: 枚举是编程中预定义的一组固定值,常用于表示有限的、已知的...

    关于java dao的入门介绍

    2. DAO接口:定义了一组操作数据的方法,例如CRUD(创建、读取、更新、删除)操作。 3. DAO具体实现类:实现了DAO接口,包含了实际的数据库访问逻辑,如JDBC代码。 4. VO(Value Object)数据传输对象:封装了业务...

    运用DAO和对象化进行重构_项目教程(2)_复习

    例如,可以将数据库表映射为对象,每个对象代表一行记录,通过对象的方法进行CRUD(创建、读取、更新、删除)操作。 3. 重构:重构是对现有代码结构的改进,目的是提高代码的可读性、可维护性,而不改变其外在行为...

    NC65数据字典

    数据字典在信息系统设计、开发、维护和管理中扮演着核心角色,因为它包含了关于数据的元数据,即关于数据的数据。以下是基于《NC65数据字典》的详细知识点解析: 1. **元数据路径**:元数据路径是数据字典中记录的...

    最短路问题

    最短路径问题在计算机科学和图论中是一个重要的问题,特别是在网络分析和路由算法中有着广泛应用。Dijkstra算法,由荷兰计算机科学家艾兹格·迪科斯彻...同时,可以直接读取`d[i]`获取从源点到顶点`i`的最短路径长度。

    oracle实现分页

    接下来是关于Java Web开发部分,这里使用了JSP+Servlet+Oracle来实现分页。在Java后端,我们通常会创建一个服务类来处理数据库查询,返回数据给前端。例如,创建一个`BlogInfo`实体类(Java VO): ```java package...

    struts2 CRUD

    结果可以是单个对象或集合,通常会被封装到一个VO(Value Object)或DTO(Data Transfer Object)中。 **更新(Update)**:更新操作同样需要一个Action类方法,比如`update()`,这个方法接收更新后的对象,进行验证...

    用友nap开发nc65中的模版转换-业务单元左侧树构造

    - **2.1 获取所有系统信息**: 通过调用`nc.vo.fip.pub.FipBaseDataProxy`中的`getAllFipSystems()`方法来获取所有系统的基础信息。 - **2.2 加载缓存数据**: 使用`nc.bs.pf.pub.PfDataCache`平台缓存工具类来加载...

    JavaEE技术-DAO设计模式

    通过VO类,我们可以封装从数据库中读取的数据,并在程序中作为对象进行传递。 3. DAO接口:定义了一系列的数据库操作方法,如添加、修改、删除和查询记录(CRUD)。由于接口中定义的是抽象方法,因此需要有具体的...

    javaWEB实现相册管理的简单功能

    最后,关于只能删除自己上传的文件这一安全特性,可以通过在数据库设计时为每张图片添加一个上传者字段,记录图片上传的用户ID。在执行删除操作前,先查询图片的上传者信息并与当前登录用户的ID进行对比,只有匹配时...

Global site tag (gtag.js) - Google Analytics