java - 使用 JdbcDatasource 的迎风报告问题

标签 java sql oracle report windward

我正在尝试使用 Windward 报告来制作简单的报告。我使用 JdbcDataSorce 对象来连接 Oracle 数据库。代码如下:

package org.qrf.test;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;

import net.windward.bean.BeanProviderException;
import net.windward.datasource.DatasetField;
import net.windward.datasource.jdbc.JdbcDataSource;
import net.windward.datasource.jdbc.JdbcDataset;
import net.windward.datasource.jdbc.JdbcDatasetField;
import net.windward.env.DataConnectionException;
import net.windward.env.DataSourceException;
import net.windward.env.OutputLimitationException;
import net.windward.format.TemplateParseException;
import net.windward.tags.TagException;
import net.windward.util.LicenseException;
import net.windward.xmlreport.AlreadyProcessedException;
import net.windward.xmlreport.ProcessReport;
import net.windward.xmlreport.ProcessRtf;
import net.windward.xmlreport.ProcessRtfAPI;
import net.windward.xmlreport.SetupException;

public class SQLDatasourcePrintTask {       
public static void main(String[] args) {
    Connection conn = null;
    try {
        Class.forName ("oracle.jdbc.OracleDriver");
        conn = DriverManager.getConnection(
                "jdbc:oracle:thin:@//localhost:1521/mybase", "scott", "tiger");
        JdbcDataSource ds = new JdbcDataSource(conn);

        ProcessReport.init();

        // объявление полей таблицы шаблона
        ArrayList<JdbcDatasetField> fields = new ArrayList<JdbcDatasetField>();
        fields.add(new JdbcDatasetField("SNAME_EDI", "VARCHAR2", "SNAME_EDI", null, DatasetField.TYPE_COLUMN));
        fields.add(new JdbcDatasetField("NAME_EDI",  "VARCHAR2", "NAME_EDI",  null, DatasetField.TYPE_COLUMN));
        fields.add(new JdbcDatasetField("ID_EDI",    "NUMBER",   "ID_EDI",    null, DatasetField.TYPE_COLUMN));
        fields.add(new JdbcDatasetField("CODE_EDI",  "NUMBER",   "CODE_EDI",  null, DatasetField.TYPE_COLUMN));
        // объявление набора данных
        JdbcDataset dataset = new JdbcDataset("SPR_EDI_DATASET", 
                "select se.id_edi, se.name_edi, se.sname_edi, se.code_edi " +
                "   from SPR_EDI se", "---", fields);
        // Объявление потоков
        InputStream in = new FileInputStream(new File("template/sql_template.rtf"));
        OutputStream out = new FileOutputStream(new File("sql_datasource_out.rtf"));            
        // объявление RTF-процессора
        ProcessRtfAPI process = new ProcessRtf(
                in, out);
        process.processSetup();
        // объявление карты переменных
        HashMap<String, Object> variablesMap = new HashMap<String, Object>();
        variablesMap.put("id_edi", 100);

        ds.setDatasets(new Object[]{dataset});                  
        ds.setMap(variablesMap);                        
        process.processData(ds, "SPR_EDI_DATASET");         
        process.processComplete();
        out.flush();
        in.close();
        out.close();
    } catch (ClassNotFoundException e) {            
        e.printStackTrace();
    } catch (SQLException e) {          
        e.printStackTrace();
    } catch (DataConnectionException e) {           
        e.printStackTrace();
    } catch (LicenseException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (SetupException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (TagException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (AlreadyProcessedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (DataSourceException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (BeanProviderException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (TemplateParseException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (OutputLimitationException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } finally {
        try {
            conn.close();               
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

}

我还使用通过自动标记工具创建的简单模板 the example of template

当我运行这个程序时,似乎连接到数据库成功,但是当我完成后打开输出文件时,我得到与上图相同的内容。请帮我解决这个问题。

最佳答案

通常,当发生这种情况时,问题出在您的电话上:

process.processData(ds, "SPR_EDI_DATASET");

使用名称“SPR_EDI_DATASET”,但模板中的标签对于数据源具有不同的名称。

关于java - 使用 JdbcDatasource 的迎风报告问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21720283/

相关文章:

php - 用户 'root' @'localhost' 的访问被拒绝(使用密码 : YES) using MAMP server

oracle - 如果在我的应用程序运行时更换 oracle 触发器,我会错过任何更改吗?

sql - Oracle sql Developer 中的变量出现问题

java - 在Java中按顺序存储各种对象类型

Java-Spring-Hibernate-H2 : Disable auto-creating of database

java - Java解析XML文档YQL查询

sql - 使用if logic oracle sql检查约束

java - 每秒执行一次方法

sql - 如何在我的子选择中删除相关子查询(由于 presto 限制)

sql - Access SQL : Nz() Function executed From VBD