Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JasperReports:IN子句在使用带参数的子数据集时为空_Java_Jasper Reports - Fatal编程技术网

Java JasperReports:IN子句在使用带参数的子数据集时为空

Java JasperReports:IN子句在使用带参数的子数据集时为空,java,jasper-reports,Java,Jasper Reports,为什么下面的查询没有在JasperReports中返回所需的结果 SELECT bbd.Bill_Id, bbd.ItemName, bbd.ItemQuantity, bbd.ItemPrice, bbd.Date FROM `borrowerbillsdetails` bbd JOIN `borrowerbills` as bb ON bbd.`Bill_Id` = bb.`Bill_Id` WHERE $X{IN ,Bill_Id, billIds} 它只返回3个结果,而在我传递的参数列

为什么下面的查询没有在JasperReports中返回所需的结果

SELECT bbd.Bill_Id, bbd.ItemName, bbd.ItemQuantity, bbd.ItemPrice, bbd.Date FROM `borrowerbillsdetails` bbd JOIN `borrowerbills` as bb ON bbd.`Bill_Id` = bb.`Bill_Id` WHERE $X{IN ,Bill_Id, billIds}
它只返回3个结果,而在我传递的参数列表中有7个ID,所有ID在数据库表中都有数据

我从中传递参数的控制器代码:

String cnic = txtCnic.getText();
String borrowerHistorypath = "/home/JRXML/BorrowerHistory.jrxml";
Connection con = null;
try {
    con = DBConnection.getConnection();

    List<BorrowerBill> borrowerBillLists = borrowerBillService.getAllBillsByCnic(cnic);
    List<Integer> billIds = new ArrayList<>();
    for(BorrowerBill borrowerBill:borrowerBillLists){
        billIds.add(borrowerBill.getBillId());
    }

    FileInputStream  fileInputStream = new FileInputStream(borrowerHistorypath);
    BufferedInputStream bufferedInputStream = new BufferedInputStream(fileInputStream);
    Map map = new HashMap();
    map.put("cnic", cnic);
    map.put("billIds",billIds);

    JasperReport jasperReport = (JasperReport) JasperCompileManager.compileReport(bufferedInputStream);
    JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, map, con);

    JasperViewer jasperViewer = new JasperViewer(jasperPrint, false);
    jasperViewer.viewReport(jasperPrint,false);
而对于其他人,它会创建正确的查询,如

SQL query string: Select * from borrowerbills where cnic = ?
   2016-10-09 22:20:10 DEBUG JRJdbcQueryExecuter:509 - Parameter #1 (cnic of type java.lang.String): 1610186922393

您的代码正在传递主数据集的值。您应该将参数的值传递给子数据集

在您的情况下,代码将是:

<jr:table xmlns:jr="http://jasperreports.sourceforge.net/jasperreports/components" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports/components http://jasperreports.sourceforge.net/xsd/components.xsd">
    <datasetRun subDataset="BillItemsDataSet" uuid="ccd44e17-2c5d-417c-b4a7-554d197ce483">
        <connectionExpression><![CDATA[$P{REPORT_CONNECTION}]]></connectionExpression>
        <datasetParameter name="billIds">
            <datasetParameterExpression><![CDATA[$P{billIds}]]></datasetParameterExpression>
        </datasetParameter>
    </datasetRun>

您的代码正在传递主数据集的值。您应该将参数的值传递给子数据集

在您的情况下,代码将是:

<jr:table xmlns:jr="http://jasperreports.sourceforge.net/jasperreports/components" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports/components http://jasperreports.sourceforge.net/xsd/components.xsd">
    <datasetRun subDataset="BillItemsDataSet" uuid="ccd44e17-2c5d-417c-b4a7-554d197ce483">
        <connectionExpression><![CDATA[$P{REPORT_CONNECTION}]]></connectionExpression>
        <datasetParameter name="billIds">
            <datasetParameterExpression><![CDATA[$P{billIds}]]></datasetParameterExpression>
        </datasetParameter>
    </datasetRun>

感谢Alex现在查询非常完美,因为在日志中,我得到了所有参数的正确查询,但仍然只显示了三条记录。该表位于详细信息栏中。当我把这张表放在其他波段时,报告甚至没有显示这3条记录。甚至整个表都是隐藏的。例如,您可以将表组件移动到标题栏。主数据源中的每个记录都会重复详细信息栏的内容。这就是JasperReports的工作原理你好Alex。当我把它放在标题栏中时,它会显示所有的项目,但所有的表都是相互放置的。所有的数据都被弄乱了。但当我将该表放在页眉栏中时,该表被隐藏,数据不显示。看起来是另一个问题。最好为它创建一个新问题Hanks Alex现在查询非常完美,因为在日志中,我得到了所有参数的正确查询,但仍然只显示了三条记录该表位于详细信息带中。当我把这张表放在其他波段时,报告甚至没有显示这3条记录。甚至整个表都是隐藏的。例如,您可以将表组件移动到标题栏。主数据源中的每个记录都会重复详细信息栏的内容。这就是JasperReports的工作原理你好Alex。当我把它放在标题栏中时,它会显示所有的项目,但所有的表都是相互放置的。所有的数据都被弄乱了。但当我将该表放在页眉栏中时,该表被隐藏,数据不显示。看起来是另一个问题。最好为它创建一个新问题
SQL query string: Select * from borrowerbills where cnic = ?
   2016-10-09 22:20:10 DEBUG JRJdbcQueryExecuter:509 - Parameter #1 (cnic of type java.lang.String): 1610186922393
<jr:table xmlns:jr="http://jasperreports.sourceforge.net/jasperreports/components" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports/components http://jasperreports.sourceforge.net/xsd/components.xsd">
    <datasetRun subDataset="BillItemsDataSet" uuid="ccd44e17-2c5d-417c-b4a7-554d197ce483">
        <connectionExpression><![CDATA[$P{REPORT_CONNECTION}]]></connectionExpression>
        <datasetParameter name="billIds">
            <datasetParameterExpression><![CDATA[$P{billIds}]]></datasetParameterExpression>
        </datasetParameter>
    </datasetRun>
<jr:table xmlns:jr="http://jasperreports.sourceforge.net/jasperreports/components" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports/components http://jasperreports.sourceforge.net/xsd/components.xsd">
    <datasetRun subDataset="BillItemsDataSet" uuid="ccd44e17-2c5d-417c-b4a7-554d197ce483">
        <connectionExpression><![CDATA[$P{REPORT_CONNECTION}]]></connectionExpression>
        <parametersMapExpression><![CDATA[$P{REPORT_PARAMETERS_MAP}]]></parametersMapExpression>
    </datasetRun>