实际场景下,java查询需要支持传递参数实现条件查询,与不带参数的Java查询相比,带参数Java查询代码的显著区别就是需要定义Java查询参数对象,对应类名为 smartbi.freequery.metadata.JavaQueryParameter
以下是示例代码:
package smartbi; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Random; import smartbi.freequery.metadata.IJavaQueryData; import smartbi.freequery.metadata.JavaQueryConfig; import smartbi.freequery.metadata.JavaQueryOutputField; import smartbi.freequery.metadata.JavaQueryParameter; import smartbi.freequery.querydata.CellData; import smartbi.freequery.querydata.GridData; import smartbi.net.sf.json.JSONObject; import smartbi.util.StringUtil; import smartbi.util.ValueType; public class IntegerGenerator implements IJavaQueryData { private static final Random RANDOM = new Random(); private Integer max = null; private Integer min = null; /** {@inheritDoc} */ public void close() { } /** 获取Java查询需要的配置信息 */ public List<JavaQueryConfig> getConfigs() { return new ArrayList<JavaQueryConfig>(); } /** 获取指定行的数据 */ public GridData getGridData(int from, int count) { GridData grid = new GridData(); List<String> headers = new ArrayList<String>(); for (JavaQueryOutputField f : getOutputFields()) { headers.add(f.getId()); } grid.setStringHeaders(headers); List<List<CellData>> data = new ArrayList<List<CellData>>(); for (int i = from, len = from + count; i < len; i++) { List<CellData> row = new ArrayList<CellData>(); CellData cell = new CellData(); cell.setType(ValueType.INTEGER); cell.setIntValue(generateRandomIntValue()); row.add(cell); data.add(row); } grid.setData(data); return grid; } private int generateRandomIntValue() { int value = RANDOM.nextInt(); if (min == null && max == null) { // } else if (min == null) { value = RANDOM.nextInt(max); } else if (max == null) { value = Math.abs(value) + min; } else { int v0 = Math.min(max, min); int v1 = Math.max(max, min); value = RANDOM.nextInt(v1) % (v1 - v0 + 1) + v0; } return value; } /** 返回Java查询的输出字段 */ public List<JavaQueryOutputField> getOutputFields() { List<JavaQueryOutputField> result = new ArrayList<JavaQueryOutputField>(); result.add(new JavaQueryOutputField("Integer", "Integer", "Integer", "", ValueType.INTEGER, "")); return result; } /** 返回参数对象 */ public List<JavaQueryParameter> getParameters() { List<JavaQueryParameter> result = new ArrayList<JavaQueryParameter>(); /**最后一个参数值true代表参数非必填,允许为空*/ result.add(new JavaQueryParameter("Max", "Max", "最大值", "", ValueType.INTEGER, true)); result.add(new JavaQueryParameter("Min", "Min", "最小值", "", ValueType.INTEGER, true)); return result; } /** 返回总行数,返回Integer.MAX_VALUE表示未知总行数 */ public int getRowCount() { return Integer.MAX_VALUE; } /** {@inheritDoc} */ public void init() { } /** {@inheritDoc} */ public void loadConfigs(String configs) { } /** 保存配置信息 */ public String saveConfigs() { return new JSONObject().toString(); } /** {@inheritDoc} */ public void setConfigValue(String key, String value) { } /** {@inheritDoc} */ public void setConfigValues(Map<String, String> configValues) { } /** 设置参数值 */ public void setParameterValue(String id, String value, String displayValue) { if (StringUtil.isNullOrEmpty(value)) { return; } else if ("Max".equals(id)) { try { max = Double.valueOf(value).intValue(); } catch (NumberFormatException e) { max = null; } } else if ("Min".equals(id)) { try { min = Double.valueOf(value).intValue(); } catch (NumberFormatException e) { min = null; } } } }