我有一个名为 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的新手。
答案 0 :(得分:2)
首先,您必须在报告中声明从数据库中检索的字段。在您的示例中,我认为字段为student_name
,nationality
和department
,所有字段都应将类设置为java.lang.String
,因为它们都是varchars
}。
您的字段声明应如下所示:
<field name="department" class="java.lang.String"/>
然后,您就可以像$F{fieln_name}
一样使用它们。
现在,我想你想在表格中看到结果数据。
在这种情况下,您将声明TableDataset
中的字段,然后将TextField放在单元格中,并将其TextField表达式设置为$ F {department}。
此外,对于这种情况,请确保将查询放在TableDataset中,而不是放在报告的主数据集中。