如何在从Java应用程序执行报表时指定子数据集查询

如何在从Java应用程序执行报表时指定子数据集查询,java,dataset,jasper-reports,report,Java,Dataset,Jasper Reports,Report,我有一个主报表,其中有一个主查询和一个表(带有子数据集),该表有自己的查询 我知道如何为主报表指定查询,但我不知道如何在Java创建报表代码中为子数据集指定查询 有人能帮忙吗 我的代码: public static java.sql.Connection cx = Connexion.SetConOn(); public static void Create report(String Query, String model, String title, String art) { t

我有一个主报表,其中有一个主查询和一个表(带有子数据集),该表有自己的查询

我知道如何为主报表指定查询,但我不知道如何在Java创建报表代码中为子数据集指定查询

有人能帮忙吗

我的代码:

public static java.sql.Connection cx = Connexion.SetConOn();

public static void Create report(String Query, String model, String title, String art) {
    try {
        JRDesignQuery jrd = new JRDesignQuery();
        JasperDesign design = JRXmlLoader.load(model);
        jrd.setText(Query);
        design.setQuery(jrd);
        Map map = new HashMap();
        JasperReport etat = JasperCompileManager.compileReport(design);
        JasperPrint print = JasperFillManager.fillReport(etat, map, cx);
        File f = new File("C:\\" + fdg);
        f.mkdir();
        JasperExportManager.exportReportToPdfFile(print, f.getPath() + "\\" + title + ".pdf");
        JasperViewer jv = new JasperViewer(print, false, Locale.FRENCH);

        try {
            java.awt.image.BufferedImage bi = javax.imageio.ImageIO.read(jv.getClass().getResource("/cycloplan/Images/Burn-icon1.png"));
            javax.swing.ImageIcon myImg = new javax.swing.ImageIcon(bi);
            jv.setIconImage(myImg.getImage());

        } catch (java.io.IOException ex) {
            ex.printStackTrace();
        }

        jv.setTitle(title);
        jv.setAlwaysOnTop(true);
        jv.setVisible(true);
    } catch (JRException ex) {
        ex.printStackTrace();
    }
}

JasperDesign类有几种不同的方法来访问子数据集;看看javadoc。我认为下面的代码应该可以用来设置子数据集查询,其中
subQueryString
是您想要使用的查询,
datasetName
是JRXML中给定给子数据集元素的名称

JRDesignQuery subQuery = new JRDesignQuery();
subQuery.setText(subQueryString);
Map<String, JRDataset> datasetMap = design.getDatasetMap();
JRDesignDataset subDataset = (JRDesignDataset) datasetMap.get(datasetName);
subDataset.setQuery(subQuery);
JRDesignQuery子查询=新建JRDesignQuery();
setText(subQueryString);
Map datasetMap=design.getDatasetMap();
JRDesignDataset子数据集=(JRDesignDataset)datasetMap.get(datasetName);
setQuery(子查询);

(*我还没有实际测试过这个代码.YMMV)

JasperDesign类有几种不同的方法来访问子数据集;看看javadoc。我认为下面的代码应该可以用来设置子数据集查询,其中
subQueryString
是您想要使用的查询,
datasetName
是JRXML中给定给子数据集元素的名称

JRDesignQuery subQuery = new JRDesignQuery();
subQuery.setText(subQueryString);
Map<String, JRDataset> datasetMap = design.getDatasetMap();
JRDesignDataset subDataset = (JRDesignDataset) datasetMap.get(datasetName);
subDataset.setQuery(subQuery);
JRDesignQuery子查询=新建JRDesignQuery();
setText(subQueryString);
Map datasetMap=design.getDatasetMap();
JRDesignDataset子数据集=(JRDesignDataset)datasetMap.get(datasetName);
setQuery(子查询);
(*我还没有实际测试这段代码。YMMV)