计算报表

阅读(1187) 标签: engine, ireport,

核心计算代码:

Context cxt = new Context();  //构建报表引擎计算环境

//.......................... //其它辅助代码,例如往报表引擎传递参数,传递数据库连接参数等,见后面的介绍

ReportDefine rd = (ReportDefine)ReportUtils.read( reportFile );

Engine engine = new Engine(rd, cxt);  //构造报表引擎

IReport iReport = engine.calc();  //运算报表

参数传递:

ParamMetaData pmd = rd.getParamMetaData();  //从报表定义中取得参数元对象ParamMetaData

String paramOrMocrName = "";

if(pmd != null){

for(int i = 0, count = pmd.getParamCount(); i < count; i ++ ) {   //讲究优化的写法

paramOrMocrName = pmd.getParam(i).getParamName();  //获取参数名

cxt.setParamValue(paramOrMocrName, request.getParameter(paramOrMocrName)); //设参数值

}}

◆添加JNDI的数据源配置

ReportServlet.addJNDIDsConfig("sqlsvr,sqlsvr,1,iso8859-1,GBK,0", "java:comp/env", true);

直接传递con,改变数据源连接:

//取得数据源

Connection connection = null;

try{

Driver driver = (Driver) Class.forName("org.hsqldb.jdbcDriver").newInstance();

DriverManager.registerDriver(driver);

con= DriverManager.getConnection("jdbc:hsqldb:hsql://localhost/demo","sa","");

}catch (Exception e){

e.printStackTrace();  }

String defDsName = cxt.getDefDataSourceName ();

if (defDsName != null) cxt.setConnection(defDsName, con);  //这样设定默认数据源

cxt.setConnection("dsName",con);   //也可以直接指定某个已经的数据源,设置其con

指定另一个系统数据源名称,从而改变数据源连接

cxt.setDefDataSourceName("demo");  //改变缺省数据源名称

通过数据源工厂改变数据源连接

IConnectionFactory connFactory=......;  //构造数据源工厂类,一般为自定义类

cxt.setConnectionFactory(sourceName,connFactory);

//其中connFactory这个类必须实现IConnectionFactory接口,并且实现他的public //java.sql.Connection getConnection() throws Exception 方法

直接传递数据库连接参数,改变数据源连接

DataSourceDefine dsoc=new DataSourceDefine();

dsoc.setDriver(......);  //设置jdbc的驱动

dsoc.setCaseSentence(......);  //设置sql的大小写是否无关,指表名字段名等

dsoc.setDSType(......);  //设置数据源类型,如DataSource.TYPE_RELATIONAL, DataSource.TYPE_ODBC

dsoc.setExtend(......);  //设置数据库的扩展属性

dsoc.setName(......);  //设置数据源名

dsoc.setPassword(......);  //设置数据库连接密码

dsoc.setUser(......);  //设置数据库访问用户名

dsoc.setUrl(......);  //设置Jdbcurl

dsoc.setUseSchema(......);  //设置是否使用模式

dsoc.setClientCharset(......);  //设置客户端的字符集

dsoc.setDBCharset(......);  //设置数据库的字符集

dsoc.setDBType(......);  //设置数据库类型,如DBTypes.ORACLE, DBTypes.SQLSVR

dsoc.setNeedTranContent(......);  //设置数据库返回值是否需要转码

dsoc.setNeedTranSentence(......);  //设置sql是否需要转码

cxt.setDataSourceConfig("jdbc/default", dsoc);

◆ 集算器数据源的连接

DBConfig dc=new DBConfig();

dc.setDriver(……);    //设置jdbc的驱动

dc.setUrl(……);  //设置Jdbcurl

dc.setUser(……);  //设置数据库访问用户名

dc.setPassword(……);  //设置数据库连接密码

dc.setUseSchema(……);  //设置是否使用模式

dc.setInfo(……);  //设置属性

dc.setCaseSentence(……);  //设置sql的大小写是否无关,指表名字段名等

dc.setAddTilde(……);  //设置是否使用代字号

dc.setExtend(……);  //设置数据库的扩展属性

ISessionFactory SessFactory= new DBSessionFactory(dc)

Env.setDBSessionFactory(dsName, SessFactory);  //设置数据源名称以及数据库连接工厂