Java JasperReports:IN子句在使用带参数的子数据集时为空
为什么下面的查询没有在JasperReports中返回所需的结果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个结果,而在我传递的参数列
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>