2014-05-08 43 views
0

我有一个名为test-3的MySQL数据库,并且只有一个名为的学生。该表的结构是这样的:JRValidationException:报表设计无效

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报告,我右键点击我的报告名称,选择该选项添加数据集,然后创建一个新的数据源并将其命名为数据。我从下拉列表中选择了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的新手。

+0

'我绝对是JasperReports的一个newby' - [JasperReports Ultimate Guide](http://jasperreports.sourceforge.net/JasperReports-Ultimate-Guide-3.pdf)非常有用 –

回答

2

首先,您必须在报告中声明从数据库检索的字段。从你的例子中,我想这些字段是student_name,nationalitydepartment,它们都应该设置为java.lang.String,因为它们都是varchars。 你的字段声明应该是这样的:

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

然后,您将能够使用他们像$F{fieln_name}

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

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