不知道大家听没听说过甚至用过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
此外,smartbi还支持带参数的Java查询,带参数的Java查询实现上面的两个方法外,还要实现setParameterValue(String id, String value, String displayValue)和getParameters()方法。简单理解,第一个就是获得参数值,value就是界面传来的参数。第二个方法与getOutputFields()方法类似,就是申请参数,供界面绑定的。
我说的可能也有不清楚的地方,但是自我感觉比官网说明说的更简单一点╮( ̄▽ ̄)╭