コードにおけるビュー・オブジェクト行のRangeの使用

結果セット全体を使用しない場合は、Rangeを使用し、1回に使用(フェッチ)する行数を指定できます。Rangeにより、結果セット内の行のサブセットにアクセスできるようになります。結果セットが大きく、すべての行をクライアントに送る必要がない場合、またはUIコントロール内に特定の行数を表示する場合は、Rangeが便利です。Rangeを定義するには、Rangeサイズ(行数)と、Range内の最初の行の索引を指定します。デフォルトでは、Rangeサイズは1に設定されます(注意: Rangeサイズを-1に設定した場合は、すべての行がフェッチされます)。Rangeを操作するには、ビュー・オブジェクトを使用して次のメソッドをコールします(Range機能は、oracle.jbo.RowIteratorインタフェースに定義されています)。

enumerateRowsInRange
getAllRowsInRange
getRangeIndexOf
getRangeSize
getRangeStart
getRowCountInRange
insertRowAtRangeIndex
scrollRange
scrollRangeTo
setCurrentRowAtRangeIndex
setRangeSize
setRangeStart

次の図に、一部のメソッドの結果を示します。左のビューでは、Rangeサイズが5に設定されている(setRangeSize(5))ため、Rangeには結果セットの最初の5行が含まれます。中央のビューでは、Rangeは結果セットの行4から始まり(setRangeStart(3)であるのはRangeが0から始まるため)、サイズが3に設定されています。したがって、Rangeには結果セットの行4から行6までが含まれます。右のビューでは、Rangeウィンドウは中央のビューのRangeの始まりから順方向に4行スクロールされます。Rangeサイズは変わっていないため、Rangeには結果セットの行8から行10までが含まれます。

Figure that illustrates range size concepts, as described in the preceding paragraphs.

次のコード例では、これらのメソッドのいくつかを使用してRangeを操作する方法を示します。この例では、アプリケーション・モジュールを初期化するヘルパー・ルーチンが別の場所ですでに実装されていることを前提にしています。

package d2e;
import oracle.jbo.*;
public class RangeDemo {
public static void main(String[] args) {
    // Helper routine connects to the generic application module.
ApplicationModule appMod =
QueryDemo.getGenericAppMod(JboContext.PLATFORM_LOCAL);
    // Specify the Java file that defines the view object.
// Format: <package>.<filename>
String voDefFile = "d2e.EmpView";
    // Identify the view object. Must be a valid Java identifier.
String voName = "demoEmpVO";
    // Create the view object within the context defined 
// by the application module.
ViewObject vo = appMod.createViewObject(voName, voDefFile);
    // Specify how many rows to fetch, then fetch them.
vo.setRangeSize(5); // vo.setRangeSize(-1) fetches all rows.
printRows(vo.getAllRowsInRange(), vo.getRangeStart()); // Gets rows 0 - 4.
    // Range window starts at row 5. Row numbers start with 0.
vo.setRangeStart(4);
vo.setRangeSize(3); // Change range size.
printRows(vo.getAllRowsInRange(), vo.getRangeStart()); // Gets rows 4 - 6.
    // Range window scrolls 2 rows. Range size stays the same.
vo.scrollRange(-2); // Positive scrolls forward, negative scrolls back.
printRows(vo.getAllRowsInRange(), vo.getRangeStart()); // Gets rows 2 - 4.
}
 // This is a helper method that prints data to the screen.
public static void printRows(Row[] rows, int rnum) {
for (int r = 0; r < rows.length; r++) {
String rowAttrs = "";
for (int i = 0; i < rows[r].getAttributeCount(); i++) {
rowAttrs += (rows[r].getAttribute(i) + "\t");
}
      System.out.println(rnum + "\t" + rowAttrs);
rnum += 1;
}
    System.out.println("----");
}
}