本文是关于明宇报表的简单示例,主要是记录学习的脚步
1、设计报表模板
设计好报表后 导出报表模板
2、编码
在webroot下添加如下文件
两个cab在明宇的包里面都有 ReportCenter.jsp 也有 分别在Deployment\Viewer和Deployment\JSP 里面
mrf文件为第一步设计导出的模板文件
测试代码:
test_report.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@page import="com.ming.webreport.MREngine"%>
<%@page import="com.undergrowth.util.MRReportUtil"%>
<%@page import="com.undergrowth.db.OracleDbAssist"%>
<%@page import="javax.servlet.jsp.tagext.TryCatchFinally"%>
<%@ taglib uri="WEB-INF/Ming.tld" prefix="ming" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'test_report.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
<%
try{
MREngine engine=new MREngine(pageContext);
//设置报表根目录
engine.setRootPath("/reports/");
//添加数据集
engine.addMRDataSet("Test_Nologging2",MRReportUtil.transResultSetToMRDataSet(new OracleDbAssist().executeQuery("SELECT tn.rule_code,tn.table_name,tn.table_comment,tn.column_name,tn.column_comment,tn.check_sql,tn.data_sql,tn.sum_sql from Test_Nologging2 tn")));
//家在报表模板
engine.addReport("Test_Nologging2");
//绑定数据集到模板
engine.bind();
//浏览器输出
}catch(Exception ex){
ex.printStackTrace();
}
%>
<ming:MRViewer id="mingView" width="100%" height="100%" shownow="true"></ming:MRViewer>
</body>
</html>
工具类
package com.undergrowth.util;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import com.ming.webreport.DataRecord;
import com.ming.webreport.MRDataSet;
import com.ming.webreport.MREngine;
/**
* 明宇报表工具类
* @author undergrowth
*
*/
public class MRReportUtil {
/**
* 转换ResultSet数据集到MRDataSet
* @param rs
* @return
* @throws SQLException
*/
public static MRDataSet transResultSetToMRDataSet(ResultSet rs) throws SQLException{
MRDataSet mrDataSet=new MRDataSet();
ArrayList<DataRecord> dataRecList=new ArrayList<DataRecord>();
while(rs.next()){
DataRecord dataRecord=new DataRecord();
//获取每一行对应的列名和列值
for(int i=1;i<=rs.getMetaData().getColumnCount();i++){
dataRecord.setValue(rs.getMetaData().getColumnName(i), rs.getObject(i));
}
dataRecList.add(dataRecord);
}
mrDataSet.addRows(dataRecList);
return mrDataSet;
}
}
package com.undergrowth.db;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.HashMap;
import java.util.Hashtable;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;
import org.apache.log4j.LogManager;
import org.apache.log4j.Logger;
/**
* 连接oracle数据库的辅助类
* 单例模式构建
* @author undergrowth
*
*/
public class OracleDbAssist {
private static Logger logger=LogManager.getLogger(OracleDbAssist.class);
private DataSource dataSource;
private Connection conn;
private Statement stmt;
private ResultSet rs;
private OracleDbAssist(){}
//使用volatile关键字 保证在多个线程中获取oDbAssist无误
private volatile static OracleDbAssist oDbAssist =null;
/**
* 双层锁
* @return
*/
public static OracleDbAssist getInstance(){
if(oDbAssist==null){
synchronized (OracleDbAssist.class) {
if(oDbAssist==null) {
oDbAssist=new OracleDbAssist();
oDbAssist.getDataSourceByJndi("SJPC");
}
}
}
return oDbAssist;
}
public DataSource getDataSource() {
return dataSource;
}
public Connection getConn() {
return conn;
}
public void setConn(Connection conn) {
this.conn = conn;
}
public Statement getStmt() {
return stmt;
}
public void setStmt(Statement stmt) {
this.stmt = stmt;
}
public ResultSet getRs() {
return rs;
}
public void setRs(ResultSet rs) {
this.rs = rs;
}
/**
* 通过jndi从weblogic里面获取数据源
* @return boolean flag 用于标示是否获取到数据源
*/
private boolean getDataSourceByJndi(String jndiDataSource){
boolean flag=false;
//提供初始化jndi上下文的参数
Hashtable env=new Hashtable();
//初始化工厂
env.put(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory");
env.put(Context.PROVIDER_URL, "t3://localhost:7001");
try {
Context ctx = new InitialContext(env);
dataSource=(DataSource) ctx.lookup(jndiDataSource);
flag=true;
logger.info("成功获取数据源!!");
} catch (NamingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
logger.error("加载数据源失败!!");
}
return flag;
}
/**
* 获取数据连接
* @return
* @throws SQLException
*/
public Connection getConnection() throws SQLException
{
if(getConn()==null) conn=dataSource.getConnection();
return getConn();
}
/**
* 执行sql查询
* @param sql
* @return
* @throws SQLException
*/
public ResultSet executeQuery(String sql) throws SQLException
{
stmt=getConnection().createStatement();
rs=stmt.executeQuery(sql);
return rs;
}
}
结果输出:
写这个主要是一点,被坑了好久
就是IE浏览器无法加载明宇报表
在IE的管理加载项中都可以看到明宇报表的插件
但是就是无法显示报表的话
找到明宇的控件 右键右击--》选择详细信息--》在所有站点上运行 就可以了
记录学习的脚步