一、新建java项目,导入对应的包
建议jdk版本不需要太高,1.8即可
必要的jar包
- %FR_HOME%/lib
- %FR_HOME%/server/lib
- %FR_HOME%/webapps/webroot/WEB-INF/lib
- jdk\lib\tools.jar
%FR_HOME% 指的你帆软安装的路径,,比如我的路径是D:\ruanjian\FineReport_10.0
二、无参java程序案例
2.1 程序对应的包路径
2.2 java内容
public class TestTableDataDemo extends SimpleTableData {
/**
* 初始化列头
* @return
*/
@Override
public String[] initColumnNames() {
return new String[]{"时间","分类", "金额"};
}
/**
* 加载行列数据
* @return
*/
@Override
public List<Object[]> loadData() {
FineLoggerFactory.getLogger().info("帆软日志打印,开始加载数据");
ArrayList<Object[]> valueList = new ArrayList();
valueList.add(new Object[]{"2024-04","纸箱", 15});
valueList.add(new Object[]{"2024-03","办公类", 22});
valueList.add(new Object[]{"2024-02","礼品类", 99});
valueList.add(new Object[]{"2024-01","电脑", 62});
valueList.add(new Object[]{"2023-12","轮胎", 52});
valueList.add(new Object[]{"2023-11","服装", 99});
valueList.add(new Object[]{"2023-10","食品", 31});
valueList.add(new Object[]{"2023-09","网络用品", 10});
valueList.add(new Object[]{"2023-08","装修类", 555});
valueList.add(new Object[]{"2023-07","清洁家具", 31});
valueList.add(new Object[]{"2023-06","标签类", 80});
valueList.add(new Object[]{"2023-05","香烟", 61});
valueList.add(new Object[]{"2023-04","叉车", 74});
valueList.add(new Object[]{"2023-03","保险", 87});
valueList.add(new Object[]{"2023-02","承运商", 54});
valueList.add(new Object[]{"2023-01","软件", 45});
return valueList;
}
}
2.3 编译好的class代码迁移
将编译好的class文件复制到%FR_HOME%/webapps/webroot/WEB-IN/classes路径下面,在这个文件夹下面需要创建和java项目路径一致的包(文件夹)
2.4 在帆软新建数据集
2.5 填充内容
在图表添加对应字段
2.6 进行预览
三、有参java程序案例
3.1 传递参数的关键代码
//[0]指的在帆软设置参数的位置 ((ParameterProvider) (parameters.get().toArray())[0]).getValue().toString();
3.2 java内容
public class TestParamTableDataDemo extends SimpleTableData {
// public static void main(String[] args) {
// TestParamTableDataDemo demo = new TestParamTableDataDemo();
// List<Object[]> s = demo.loadData();
// System.out.println(s.toArray());
// }
/**
* 初始化列名称,查询出的结果有多少列
* 如果有多于的列,列内容为空
*
* @return
*/
@Override
public String[] initColumnNames() {
String[] columnNames = new String[10];
for (int i = 0; i < 10; i++) {
columnNames[i] = "column#" + i;
}
return columnNames;
}
@Override
public List<Object[]> loadData() {
// 保存得到的数据库表名
String tableName = ((ParameterProvider) (parameters.get().toArray())[0]).getValue().toString();
String param1 = ((ParameterProvider) (parameters.get().toArray())[1]).getValue().toString();
FineLoggerFactory.getLogger().info("传递过来的参数为:tableName:" + tableName + " param1:" + param1);
// 构造SQL语句,并打印出来
String sql = "select * from " + tableName;
if (StringUtils.isNotBlank(param1)) {
sql = sql + " where id = " + param1;
}
FineLoggerFactory.getLogger().info("查询sql: " + sql);
// 保存得到的结果集
ArrayList<Object[]> valueList = new ArrayList();
Connection con = null;
try {
con = getConnection();
FineLoggerFactory.getLogger().info("连接信息 \n" + con.toString());
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery(sql);
// 获得记录的详细信息,然后获得总列数
ResultSetMetaData rsmd = rs.getMetaData();
int colNum = rsmd.getColumnCount();
FineLoggerFactory.getLogger().info("colNum \n" + colNum);
// 用对象保存数据
Object[] objArray = null;
while (rs.next()) {
objArray = new Object[colNum];
for (int i = 0; i < colNum; i++) {
objArray[i] = rs.getObject(i + 1);
}
// 在valueList中加入这一行数据
valueList.add(objArray);
}
// 释放数据库资源
rs.close();
stmt.close();
} catch (Exception e) {
FineLoggerFactory.getLogger().info("错误信息 \n" + e.getMessage());
FineLoggerFactory.getLogger().error(e.getMessage(), e);
} finally {
try {
if (con != null) {
con.close();
}
} catch (SQLException e) {
FineLoggerFactory.getLogger().error(e.getMessage(), e);
}
}
return valueList;
}
/**
* 获取数据库连接 driverName和 url 可以换成您需要的
*
* @return Connection
*/
private Connection getConnection() {
String driverName = "com.mysql.jdbc.Driver";
String username = "rokin";
String password = "ZTtest@admin2022!";
String url = "jdbc:mysql://172.16.85.19:3307/sys_configration?serverTimezone=GMT%2B8&characterEncoding=utf-8&allowPublicKeyRetrieval=true";
Connection con = null;
try {
Class.forName(driverName);
con = DriverManager.getConnection(url, username, password);
} catch (Exception e) {
FineLoggerFactory.getLogger().error(e.getMessage(), e);
}
return con;
}
}
3.3 新建有参数据集
3.4 填充内容
3.5 进行预览
3.6 查看日志
通过日志查看参数执行情况
打开日志%FR_HOME%/logs
查看日志情况
注意点:如果在执行过程中,发现引用的java程序存在异常,修改完成以后再次编辑,将class覆盖修改的代码未生效,建议新建一个类,将原先的类删除。