JRValidationException:报表设计无效

时间:2014-05-08 11:50:55

标签: mysql sql jasper-reports ireport

我有一个名为 test-3 的MySQL数据库,只有一个名为 student 的表。表结构如下:

CREATE TABLE `student` (
`student_id` int(11) NOT NULL AUTO_INCREMENT,
`student_name` varchar(50) NOT NULL,
`nationality` varchar(255) NOT NULL,
`department` varchar(30) NOT NULL,
`fathers_name` varchar(50) DEFAULT NULL,
`mothers_name` varchar(50) DEFAULT NULL,
 PRIMARY KEY (`student_id`)
 ) 

现在,我想在iReport 5.5.0中创建一个报告,右键单击我的报告名称,选择 Add Dataset 选项,然后创建一个新的数据源并将其命名为数据即可。我从下拉列表中选择了MySQL,选择了数据库,建立了MySQL连接并且成功了。到现在为止还挺好。现在,我之前已经设计了我的报表结构,并且还使用iReport中的拖放选项将表拖到我的报表中(从数据集中选择字段,然后拖放到报表中)。但每当我点击预览按钮时,我都会收到以下消息:

 net.sf.jasperreports.engine.design.JRValidationException: Report design not valid :       
 1. Field not found : student_name      
 2. Field not found : nationality      
 3. Field not found : department

我的报告未加载。

我运行以检索结果集的SQL查询是这样的:

  select student_name, nationality, department 
  from student

任何人都可以解释问题所在吗?我绝对是JasperReports和iReport的新手。

1 个答案:

答案 0 :(得分:2)

首先,您必须在报告中声明从数据库中检索的字段。在您的示例中,我认为字段为student_namenationalitydepartment,所有字段都应将类设置为java.lang.String,因为它们都是varchars }。 您的字段声明应如下所示:

<field name="department" class="java.lang.String"/>

然后,您就可以像$F{fieln_name}一样使用它们。

现在,我想你想在表格中看到结果数据。 在这种情况下,您将声明TableDataset中的字段,然后将TextField放在单元格中,并将其TextField表达式设置为$ F {department}。

此外,对于这种情况,请确保将查询放在TableDataset中,而不是放在报告的主数据集中。