带参数自定义查询,可通过oracle.jbo.server.ApplicationModuleImpl的createViewObjectFromQueryStmt()和setWhereClauseParam()方法实现,不需要再调用executeQuery()。
import oracle.jbo.domain.Number;
import oracle.jbo.server.ViewObjectImpl;
public static final String APPMODULEDC = "AppModuleDataControl";
public String testParamQuery(){
String sqlStr = "select * from locations where LOCATION_ID < :1"; //:1可以改为0:, 8:等
Number locId = new Number(1601);
ViewObjectImpl vo = (ViewObjectImpl)getAm().findViewObject("TEMP");
if (vo != null)
vo.remove();
vo = (ViewObjectImpl)getAm().createViewObjectFromQueryStmt("TEMP", sqlStr);
vo.setWhereClauseParam(0, locId); //ParamIndex must start from 0
// vo.executeQuery(); 不需要
vo.setRangeSize(5);
int count = vo.getRowCount();
System.out.println("vo.getRowCount(): " + count); //OUTPUT: 16
//Test Range
Row[] rows = vo.getAllRowsInRange(); //操作后,处于第一个Range
System.out.println("getRangeStart: " + vo.getRangeStart()); //OUTPUT: 0
for (int i = 0; i < rows.length; i++){
System.out.println(i + ":" + SysUtils.getStr(rows[i].getAttribute("LOCATION_ID")));
}
rows = vo.getNextRangeSet(); //操作后,还是处于第一个Range
System.out.println("getRangeStart: " + vo.getRangeStart()); //OUTPUT: 0
for (int i = 0; i < rows.length; i++){
System.out.println(i + ": " + SysUtils.getStr(rows[i].getAttribute("LOCATION_ID")));
}
rows = vo.getNextRangeSet(); //操作后,还是处于第二个Range
System.out.println("getRangeStart: " + vo.getRangeStart()); //OUTPUT: 5
for (int i = 0; i < rows.length; i++){
System.out.println(i + ": " + SysUtils.getStr(rows[i].getAttribute("LOCATION_ID")));
}
return null;
}
protected AppModuleImpl getAm() {
return (AppModuleImpl)this.getApplicationModule(APPMODULEDC);
}