MongoDB程序数据集源码分享
继上一次,致远单点FR免积分下载,本次再次为大家提供FR连接MongoDB免积分下载
由于MongoDB插件有6000大洋,老板不批这笔钱,所以只好自己写程序来读取
但此代码没有官方方便,仅供入门级使用,如果老板不差钱,请购买官方正版
代码参考版主文档:https://help.finereport.com/doc-view-642.html
先说说该代码的缺点:
1.没有办法支持动态集合,由于程序数据集是先构建数据结构,后渲染数据内容,导致无法通过传参渲染集合名后查询,因此修改集合需要修改代码后重新编译;
2.没法支持MongDB的查询语法,主要我懒,没加这个功能,可用FR自带的过滤功能过滤就好;
3.其他缺点暂时没想到,欢迎各位补充;
优点:
1.代码不要钱,自己下载后编译即可使用;
2.作者很帅;
下面附上代码:package com.gosuncn.plugin;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.fr.data.AbstractTableData;
import com.mongodb.MongoClient;
import com.mongodb.MongoClientOptions;
import com.mongodb.MongoCredential;
import com.mongodb.ServerAddress;
import com.mongodb.client.MongoCollection;
import org.bson.Document;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.LinkedHashSet;
import java.util.Set;
public class MongoDBPlugin extends AbstractTableData {
/**
* 列名数组,保存程序数据集所有列名
*/
private String columnNames;
/**
* 定义程序数据集的列数量
*/
private int columnNum = 10;
/**
* 保存查询表的实际列数量
*/
private int colNum = 0;
/**
* 保存查询得到列值
*/
//private ArrayList valueList = null;
private LinkedHashSet> valueList;
private MongoCollection doc;
//以下是连接MongoDB所需的信息,请自行补充
private String username = "";
private String password = "";
private String db = "";
private String host = "";
private String port = "";
private String collection = "";
/**
* 构造函数,定义表结构
*/
public MongoDBPlugin() {
doc = getMongoDB(username, password, db, host, Integer.valueOf(port), collection);
JSONArray jsonArray = new JSONArray();
ArrayList list = new ArrayList();
for (Document document : doc.find()) {
LinkedHashMap row = new LinkedHashMap();
JSONObject jsonObj = JSONObject.parseObject(document.toJson());
jsonArray.add(jsonObj);
Set keySet = jsonObj.keySet();
for (String key : keySet) {
if (!list.contains(key)) {
list.add(key);
}
}
}
columnNum = list.size();
columnNames = new String;
// while (itCol.hasNext()) {
// columnNames = itCol.next().toString();
// j++;
// }
for (int i = 0; i < list.size(); i++) {
columnNames = list.get(i).toString();
}
}
/**
* 实现其他四个方法
*
* @return columnNum
*/
@Override
public int getColumnCount() {
return columnNum;
}
@Override
public String getColumnName(int columnIndex) {
return columnNames;
}
@Override
public int getRowCount() {
init();
return valueList.size();
}
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
init();
int tempRowIndex = 0;
for (LinkedHashMap row : valueList) {
if (tempRowIndex == rowIndex) {
return row.get(columnNames);
}
tempRowIndex += 1;
}
return null;
}
/**
* 准备数据
*/
private void init() {
// 确保只被执行一次
if (valueList != null) {
return;
}
// String newcollection = ((ParameterProvider) (parameters.get().toArray())).getValue().toString();
// FineLoggerFactory.getLogger().debug("tableName=" + tableName);
// 保存得到的数据库表名
valueList = new LinkedHashSet>();
try {
doc = getMongoDB(username, password, db, host, Integer.valueOf(port), collection);
// Object objArray = null;
// colNum = (int) doc.count();
JSONArray jsonArray = new JSONArray();
for (Document document : doc.find()) {
LinkedHashMap row = new LinkedHashMap();
JSONObject jsonObj = JSONObject.parseObject(document.toJson());
jsonArray.add(jsonObj);
Set keySet = jsonObj.keySet();
for (String key : keySet) {
row.put(key, jsonObj.get(key).toString());
}
valueList.add(row);
}
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 释放一些资源,因为可能会有重复调用,所以需释放valueList,将上次查询的结果释放掉
*
* @throws Exception e
*/
@Override
public void release() throws Exception {
super.release();
this.valueList = null;
}
public MongoCollection getMongoDB(String user, String password, String db, String host,
int port, String collection) {
char pw = password.toCharArray(); //密码
MongoCredential credential = MongoCredential.createCredential(user, db, pw); //验证对象
MongoClientOptions options = MongoClientOptions.builder().sslEnabled(false).build(); //连接操作对象
MongoClient mongoClient = new MongoClient(new ServerAddress(host, port), credential, options); //连接对象
MongoCollection doc = mongoClient.getDatabase(db).getCollection(collection);
return doc;
}
public static void main(String args) {
MongoDBPlugin mongoDBPlugin = new MongoDBPlugin();
System.out.println("count=" + mongoDBPlugin.getColumnCount());
for (int i = 0; i < mongoDBPlugin.getColumnCount(); i++) {
System.out.println(mongoDBPlugin.getColumnName(i));
}
}
}
编辑于 2020-1-10 11:34