コードでのビュー・オブジェクト問合せの作成および変更

このトピックの例では、ビュー・オブジェクトにより使用される問合せ文を、SQLを使用して定義および変更する方法を示しています。次の表では、メソッドの例を説明し、各メソッドで使用されるBusiness Components for Javaフレームワークの主なメソッドをリストします。

説明

主なフレームワークのメソッド

demoSimpleFetch

すべての情報がハードコードされた静的SQL文

ApplicationModule.createViewObjectFromQueryStmt

注意: createViewObjectFromQueryStmtを使用して作成したビュー・オブジェクトは、基礎となるエンティティ・オブジェクトがないため、読取り専用になります。

demoWhereClause

実行時にWHERE句が追加される静的SQL文

ViewObject.setWhereClause

demoParamFetch

1つ以上のパラメータを使用する問合せ

ViewObject.setWhereClauseParam,
ViewObject.setWhereClauseParams

ClausesDemo

問合せ句および例による問合せを扱うためのメソッドの使用方法が示されたクラス

ViewObject.setWhereClause,
ViewObject.setOrderByClause,
ApplicationModule.createViewObjectFromQueryClauses,
ViewObject.createViewCriteria,
ViewCriteria.createViewCriteriaRow,
ViewCriteriaRow.setAttribute,
ViewCriteria.addElement,
ViewObject.applyViewCriteria

単純なフェッチの例

すべての情報がハードコードされた静的SQL文

public static void demoSimpleFetch(ApplicationModule appMod) {
// Define basic query string.
String sqlStr = "SELECT Emp.ename, Emp.mgr FROM EMP Emp ";
ViewObject vo = appMod.createViewObjectFromQueryStmt("QueryDemo", sqlStr);
printViewObject(vo);
vo.remove();
}

WHERE句の例

public static void demoWhereClause(ApplicationModule appMod) {
// Define basic query string.
String sqlStr = "SELECT Emp.ename, Emp.mgr FROM EMP Emp ";
ViewObject vo = appMod.createViewObjectFromQueryStmt("whereDemo", sqlStr);
// Define and set WHERE clause. (See also ViewObject.setOrderByClause)
vo.setWhereClause(" Emp.mgr > 7700 ");
printViewObject(vo);
}

パラメータ・フェッチの例

次の例では、コロン(:)スタイルのかわりに疑問符(?)パラメータ・スタイルを使用します。ビュー・オブジェクト・ウィザードで、問合せで使用するスタイルを選択する必要があります。ビュー・オブジェクト・ウィザードの「パラメータに"?"を使用」フィールドを、動的問合せに合せて必ず設定するようにしてください。

public static void demoParamFetch(ApplicationModule appMod, Object inParam) {
    // Query takes one parameter: Emp.mgr.
String sqlStr = "SELECT Emp.ename, Emp.mgr FROM EMP Emp ";
ViewObject vo = appMod.createViewObjectFromQueryStmt("oneParam",
sqlStr);
    vo.setWhereClause(" Emp.mgr > ? ");
    // Set one parameter value. 0 specifies the first parameter.
vo.setWhereClauseParam(0, inParam);
    // To remove or reset parameters, call vo.setWhereClauseParams(null).
printViewObject(vo);
    // Query takes two parameters: Emp.mgr and Emp.sal.
sqlStr = "SELECT Emp.ename, Emp.mgr, Emp.sal FROM EMP Emp " +
"WHERE Emp.mgr = ? " +
"AND Emp.sal <= ? ";
    vo = appMod.createViewObjectFromQueryStmt("multiParams", sqlStr);
    // Use an array to set several parameters with one method call.
Object[] params = new Object[2];
params[0] = inParam;
params[1] = new Integer(3000);
    vo.setWhereClauseParams(params);
    // To remove or reset parameters, call vo.setWhereClauseParams(null).
printViewObject(vo);
}

ビュー・オブジェクト、SQLおよび問合せ句を扱う例

次のクラス例では、ビュー・オブジェクト、SQLおよび問合せ句を扱うメソッドの使用方法を示します。また、例による問合せをサポートするための条件を定義する方法も示しています。

package d2e;
import oracle.jbo.*;
public class ClausesDemo
{
// Helper routine connects to the generic application module.
      public static void main(String[] args) {
ApplicationModule appMod =
QueryDemo.getGenericAppMod(JboContext.PLATFORM_LOCAL);
      // Define basic query string.
String sqlStr = "SELECT empno, ename, job, mgr FROM EMP ";
      // View object based on Query clauses.
ViewObject vo = appMod.createViewObjectFromQueryClauses("clausesVO",
"d2e.Emp",
"empno, ename, job, mgr",
"Emp",
null,
null);
      demoWhereClause(vo);
demoOrderByClause(vo);
demoCriteria(appMod);
demoCreateFromClauses(appMod);
}
   public static void demoWhereClause(ViewObject vo) {
      // Define and set WHERE clause.
String whereStr = " Emp.empno = 7839 ";
vo.setWhereClause(whereStr);
System.out.println("Demo Where Emp.empno = 7839");
      //Should print only one employee with empno = 7839
QueryDemo.printViewObject(vo);
      // Replace the previous WHERE clause with the following.
System.out.println("Demo Where Emp.empno = 7566");
whereStr = " Emp.empno = 7566 ";
vo.setWhereClause(whereStr);
      //Should print only one employee with empno = 7566
QueryDemo.printViewObject(vo);
}
   public static void demoOrderByClause(ViewObject vo) {
      // Define and set ORDER BY clause.
String orderStr = " Emp.job ";
vo.setWhereClause("");
vo.setOrderByClause(orderStr);
System.out.println("Demo Order By Emp.job");
      //Should print all employees ordered by Job column
QueryDemo.printViewObject(vo);
      // Replace the previous ORDER BY clause with the following.
orderStr = " Emp.mgr ";
vo.setOrderByClause(orderStr);
System.out.println("Demo Order By Emp.mgr");
      //Should print all employees ordered by Mgr column
QueryDemo.printViewObject(vo);
}
   public static void demoCriteria(ApplicationModule appMod) {
      // Create and populate criteria rows to support query-by-example.
ViewObject empView = appMod.createViewObject("emp",
"d2e.EmpView");
ViewCriteria vc = empView.createViewCriteria();
ViewCriteriaRow vcRow = vc.createViewCriteriaRow();
      // ViewCriteriaRow attribute name is case-sensitive.
// ViewCriteriaRow attribute value requires operator and value.
// Note also single-quotes around string value.
vcRow.setAttribute("Job", "= 'MANAGER'");
vc.addElement(vcRow);
      vcRow = vc.createViewCriteriaRow();
vcRow.setAttribute("Sal", "> 2500");
      vc.addElement(vcRow);
empView.applyViewCriteria(vc);
      // Multiple rows are OR-ed in WHERE clause.
System.out.println("Demo View Criteria");
      //Should print employees that are MANAGER or have Sal > 2500
QueryDemo.printViewObject(empView);
}
   public static void demoCreateFromClauses(ApplicationModule appMod) 
{
String voName = "demoClauses";
String eoDefName = "d2e.Emp";
String selectClause = "E.EMPNO, E.ENAME, E.JOB, E.DEPTNO";
String fromClause = "EMP E";
String whereClause = "E.DEPTNO = 10 ";
String orderByClause = null;
ViewObject vo = appMod.createViewObjectFromQueryClauses(
voName,
eoDefName,
selectClause,
fromClause,
whereClause,
orderByClause);
      System.out.println("Demo ViewObject created from clauses");
      //Should print all employees for Dept = 10
QueryDemo.printViewObject(vo);
      // WHERE clauses are AND-ed together.
vo.setWhereClause("job = 'MANAGER' ");
      System.out.println("Demo where clauses AND-ed together");
      //Should print all employees for Dept = 10 and Job = 'MANAGER'
QueryDemo.printViewObject(vo);
}
}