SmartBI Java查询 小记

不知道大家听没听说过甚至用过Smartbi Insight,最近公司正好用到了它,并且用到了一个java查询的功能,研究了大半天,所以在这里记录一下。其实Smartbi是有非常详细的说明书的,但是在java查询部分可能是由程序员写的(没别的意思,就是吐槽讲的不详细,别对号入座),对于阅读者来说还是不太容易理解。

Smartbi怎么部署Java查询扩展包以及Java查询环境请参考Smartbi的官方说明书,讲的很详细,一步一步操作即可。接下来直接上代码,记录一下方法和参数的含义以及编写思路。

public class MySelectwithpara implements IJavaQueryData {
	//参数,用来获得smartbi传入的参数
	private String para="";
	//关闭Java查询对象,关闭必要的资源
	@Override
	public void close() {
	}
    // 获取Java查询需要的配置信息
	@Override
	public List getConfigs() {
		return new ArrayList();
	}
    //获取指定行的数据
	@Override
	public GridData getGridData(int arg0, int arg1) {
		GridData grid = new GridData();
        List headers = new ArrayList();
        for (JavaQueryOutputField f : getOutputFields()) {
            headers.add(f.getId());
        }
        grid.setStringHeaders(headers);
        
        List> data = this.getDate();
        grid.setData(data);
        return grid;
	}
	@Override
	//设置输出字段
	public List getOutputFields() {
		List result = new ArrayList();
		//参数:String id, String name, String alias, String desc, ValueType dataType, String dataFormat
        result.add(new JavaQueryOutputField("id", "id", "id", "", ValueType.STRING, ""));
        result.add(new JavaQueryOutputField("username", "username", "username", "", ValueType.STRING, ""));
        result.add(new JavaQueryOutputField("password", "password", "password", "", ValueType.STRING, ""));
        result.add(new JavaQueryOutputField("update", "update", "update", "", ValueType.STRING, ""));
        return result;
	}
	@Override
	//设置输入参数的字段
	public List getParameters() {
		List result = new ArrayList();
        result.add(new JavaQueryParameter("Date", "Date", "日期", "", ValueType.STRING, true));
        return result;
	}
	@Override
	public int getRowCount() {
		//  返回总行数,返回Integer.MAX_VALUE表示未知总行数
		return Integer.MAX_VALUE;
	}
	@Override
	public void init() {		
	}
	@Override
	public void loadConfigs(String arg0) {
	}
	@Override
	public String saveConfigs() {
		return new JSONObject().toString();
	}
	@Override
	public void setConfigValue(String arg0, String arg1) {
	}
	@Override
	public void setConfigValues(Map arg0) {
	}
	@Override
	public void setParameterValue(String id, String value, String displayValue) {
		//获得参数对象
		para=value;
	}
	/**
	 * JDBC获得数据
	 * @param SQL 要查询的SQL
	 * @param colnum 查询结果的列数
	 * @param para 参数
	 * @return List>
	 */
	public List> getDate(){
		List> list=new ArrayList<>();
		try {
			Class.forName("org.postgresql.Driver");
			Connection conn=DriverManager.getConnection("jdbc:postgresql://127.0.0.1:5432/postgres", "postgres", "123456");
			PreparedStatement pst=conn.prepareStatement("select id,username,password,updata from mytablepara where updata >= to_date(?,'YYYY-MM-DD')");
			pst.setString(1, para);
			ResultSet rs=pst.executeQuery();
			while(rs.next()) {
				List row = new ArrayList();
				for(int j=1;j<5;j++) {
					CellData cell = new CellData();
					cell.setType(ValueType.STRING);
					cell.setStringValue(rs.getString(j));
					row.add(cell);
				}
				list.add(row);
			}
			pst.close();
		    conn.close();
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return list;
	}	
}

其实Java查询非常简单(≖ᴗ≖)✧。Java查询主要实现的只有两个方法getOutputFields()和getGridData(int arg0, int arg1)。而且两个方法的内容基本都是固定的。第一个方法简单理解就是要返回输出字段,返回List对象,所以在list里面add一个JavaQueryOutputField对象即可,即new JavaQueryOutputField("id", "id", "id", "", ValueType.STRING, ""),参数分别为id,name,alias,desc,dataType,dataFormat。想输出几个字段就add几个JavaQueryOutputField对象就行了。第二个方法简单理解就是要返回展示的数据,返回GridData对象(GridData对象有两部分,Headers和Data,分别对应两个方法setStringHeaders(headers)和setData(data)),按照上面的代码拼接一下就行了。

此外,smartbi还支持带参数的Java查询,带参数的Java查询实现上面的两个方法外,还要实现setParameterValue(String id, String value, String displayValue)和getParameters()方法。简单理解,第一个就是获得参数值,value就是界面传来的参数。第二个方法与getOutputFields()方法类似,就是申请参数,供界面绑定的。

我说的可能也有不清楚的地方,但是自我感觉比官网说明说的更简单一点╮( ̄▽ ̄)╭

你可能感兴趣的:(SmartBI Java查询 小记)