您的位置:首页 > 编程语言

使用ADF-BC 实现查询功能之四:通过代码动态设置Where条件参数

2014-08-20 19:20 1161 查看
开发环境:JDevloper 11.1.2.1.0+ Oracle Database 10g Express Edition 10.2.0.1。

在VO上设置Where条件子句并绑定一个参数后,有时我们需要在代码中动态设置参数值。

更有一种情况是:动态为VO增加条件参数并设置参数值。

以下我就以《使用ADF-BC
实现查询功能之二:ExecuteWithParams》的项目为基础,说明如何实现动态查询。

1. 动态设置参数值

在本例中,已经为EmployeesView绑定一个参数:bv_email。

为了更清楚地说明如何实现,我使用一个单独的Java类来实现,以下代码完全可以用在Managed Bean中。

主要代码如下:

(1)首先获取Application Moudule实例

String amDef = "model.AppModule";

String amConfig = "AppModuleLocal";

ApplicationModule am = Configuration.createRootApplicationModule(amDef, amConfig);

(2)然后获取EmployeesView实例

ViewObject vo = am.findViewObject("EmployeesView1");

(3)接着设置Where语句中的参数,这里bv_email即在VO中的绑定的变量名称。

vo.setNamedWhereClauseParam("bv_email", "M%");

(4)最后执行VO对象上的executeQuery()方法。

运行结果如下: 可以看出,这里只显示Email以”M“开头的用户:

--------------Query Result-----------------

130 Mozhe Atkinson MATKINSO

201 Michael Hartstein MHARTSTE

164 Mattea Marvins MMARVINS

134 Michael Rogers MROGERS

182 Martha Sullivan MSULLIVA

120 Matthew Weiss MWEISS

2. 动态增加参数

步骤(1)和(2)与上面相同

(3)新增查询条件

//新增一个条件子句,注意原来定义在VO上的Where子句依然有效,Where子句之间是”AND"的关系。

//这里EMPLOYEE_ID是数据库字段名称,bv_employeeId就是新增的参数,在VO中并没有定义这个参数。

vo.setWhereClause("EMPLOYEE_ID = :bv_employeeId");

// 定义参数:bv_employeeId

vo.defineNamedWhereClauseParam("bv_employeeId", null, null);

// 给参数:bv_employeeId赋值

vo.setNamedWhereClauseParam("bv_employeeId", new Number(120));

// 执行查询

executeAndShowResults(vo);

// 清空参数

vo.removeNamedWhereClauseParam("bv_employeeId");

// 清空动态增加的条件子句,如果不清空,新增的条件子句将一直存在

// 注意,这里只能清空动态增加的条件,VO上定义的条件子句不能通过代码清空。

vo.setWhereClause(null);

输出结果如下:可以看出这个结果是在两个条件取交集的结果。

--------------Query Result-----------------

120 Matthew Weiss MWEISS

3. 完整的TestVOBindVarsClient.java内容如下:

可以直接右键运行此类,事先无需为AM或VO生成Java类。

package model;

import oracle.jbo.ApplicationModule;
import oracle.jbo.Row;
import oracle.jbo.ViewObject;
import oracle.jbo.client.Configuration;
import oracle.jbo.domain.Number;

public class TestVOBindVarsClient {
public TestVOBindVarsClient() {
super();
}

public static void main(String[] args) {
String amDef = "model.AppModule";
String amConfig = "AppModuleLocal";
ApplicationModule am = Configuration.createRootApplicationModule(amDef, amConfig);
ViewObject vo = am.findViewObject("EmployeesView1");

//testcase 1:
vo.setNamedWhereClauseParam("bv_email", "M%");
executeAndShowResults(vo);

//testcase 2:
vo.setWhereClause("EMPLOYEE_ID = :bv_employeeId");
vo.defineNamedWhereClauseParam("bv_employeeId", null, null);
vo.setNamedWhereClauseParam("bv_employeeId", new Number(120));
executeAndShowResults(vo);
// empty param
vo.removeNamedWhereClauseParam("bv_employeeId");
// empty where clause
vo.setWhereClause(null);

// release am
Configuration.releaseRootApplicationModule(am, true);
}

private static void executeAndShowResults(ViewObject vo) {
System.out.println("--------------Query Result-----------------");
vo.executeQuery();
while (vo.hasNext()) {
Row emp = vo.next();
System.out.println(emp.getAttribute("EmployeeId") + " " + emp.getAttribute("FirstName") + " " +
emp.getAttribute("LastName") + " " + emp.getAttribute("Email"));
}
}
}


Project 下载:ADF_Query_ExecuteWithParams(3).7z

参考文献:

1. http://adfcodebits.blogspot.com/2010/05/bit-18-dynamically-changing-view.html
2. http://formattc.wordpress.com/2010/04/02/custom-java-bind-variable-in-a-where-clause-of-an-adf-view-object/
3. https://blogs.oracle.com/jdevotnharvest/entry/whats_the_difference_between_view_crite ria_and_where_clause

4. http://blog.csdn.net/luyushuang/article/details/6635880
5. http://jobinesh.blogspot.com/2010/10/creating-view-criteria-having-bind.html http://maping930883.blogspot.com/2010/04/adf064adf-bc-where.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐