Oracle ADF ViewObject-动态更改where子句
在我的action类中,我想将where条件更改为Oracle ADF ViewObject-动态更改where子句,oracle,oracle-adf,Oracle,Oracle Adf,在我的action类中,我想将where条件更改为sal=10,从而从sal=10的employees中选择select* 我不想要WHERE子句中的empno列 vo.setWhere子句(null)没有清除empno=?。它在现有where子句后面追加sal=? 如何解决这个问题?也许这会帮助您解决这个问题: <ViewObject name ="emp" selectList="select * from employees" Where= "empno=?" />
sal=10
,从而从sal=10的employees中选择select*
我不想要WHERE
子句中的empno
列
vo.setWhere子句(null)
没有清除empno=?
。它在现有where子句后面追加sal=?
如何解决这个问题?也许这会帮助您解决这个问题:
<ViewObject name ="emp" selectList="select * from employees" Where= "empno=?" />
默认情况下,ViewObject将where子句扩展到现有sql代码。
要避免此问题,应使用ViewObject.FULLSQL\u MODE\u扩充属性。例如:
<ViewObject name="emp" selectList="select * from employees" Where="sal=10" />
最简单的方法是不要在视图对象查询中包含where-param,而是通过backbean或托管bean函数代码动态使用where-param
ViewObject vo = getViewObject();
vo.setFullSqlMode(voi.FULLSQL_MODE_AUGMENTATION);
vo.setWhereClause("sal=:sal"); //or use setSql()
vo.setWhereClauseParam("sal",10.00);
vo.clearCache();
vo.executeQuery();
在这里,在视图对象中使用简单的“select*query”,并使用bean方法动态添加where子句,然后执行视图对象。动态子句只能附加到VO查询中。如果需要从VO查询中删除任何子句,则没有相应的方法,因此可以使用以下代码作为解决方法:
ViewObject vo1 = applicationmoduleobject.findViewObject("viewobjectname");
vo.setWhereClause(" CREATED_BY = userId and ASSIGNMENT_ID = assignId");
long count = vo.getEstimatedRowCount();
新的where子句被追加到初始查询中。现在我的sql是select*from employees,其中empno=?sal=10。还有什么我可以避免的吗?好的,然后尝试使用setQuery(String newSql)更改整个sql
System.out.println("Original query: " +sanctVo.getQuery());
sanctVo.setQuery("select * from employees where sal = :1");
sanctVo.setWhereClauseParam(0, 10);
System.out.println("New query: " +sanctVo.getQuery());
sanctVo.executeQuery();