我用报表设计器做了一个模板,是显示三个相关联的表的数据。通过修改DataSource显示最新数据,总是提示:JRCAgent15 detected an exception: 查找 JNDI 名称 (mysql) 时出错。如果只用一个表就没问题。源码如下:
<%@page contentType="text/html; charset=utf-8" %>
<%@page import="com.filterData.DataSource" %>
<%@page import="com.crystaldecisions.report.web.viewer.*" %>
<%@ page import="com.crystaldecisions.reports.sdk.*,com.crystaldecisions.reports.sdk.*,java.sql.*" %>
<%    
    ReportClientDocument rcd = new ReportClientDocument();
rcd.open("reports/collect.rpt", 0);
//针对三个表的sql语句  
String query = "SELECT `student1`.`name`, `class1`.`name`, `student1`.`id`, `1`.`name`, `1`.``, `student1`.`time`"+
"FROM   `class` `class1` INNER JOIN (`` `1` INNER JOIN `student` `student1` ON `1`.`id`=`student1`.``) "+
"ON `class1`.`id`=`student1`.`classid` ORDER BY `student1`.`name`";
//针对一个表的sql语句
//String query = " SELECT `student1`.`name`, `student1`.`classid` FROM   `student` `student1` where `student1`.`name`='lion' ORDER BY `student1`.`name`";
Class.forName("com.mysql.jdbc.Driver");
String url = "jdbc:mysql://localhost:3306/test";
Connection conn = DriverManager.getConnection(url, "root", "123456");
Statement state = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
ResultSet result = state.executeQuery(query);
int i = 0;
while(result.next()){
//三张表或一张表的时候,这个地方打印的数据都是对的。
System.out.println("---"+i+++"::"+result.getString(1)+"::"+result.getString(2));
//
}
//添加下边两句话,重设DataSource后,对一张的情况就没问题,对三张表的情况就报错:JRCAgent15 detected an exception: 查找 JNDI 名称 (mysql) 时出错。
String tableAlias = rcd.getDatabaseController().getDatabase().getTables().getTable(0).getAlias();
//这个地方打印了第一个表的别名class1,是对的。
System.out.println("tableAlias:"+tableAlias);
//三张表的情况
rcd.getDatabaseController().setDataSource(result, "class1", "class");
//一张表的情况
//rcd.getDatabaseController().setDataSource(result, "student1", "student");
    CrystalReportViewer crViewer=new CrystalReportViewer();
    crViewer.setOwnPage(true);
    crViewer.setOwnForm(true);
    crViewer.setPrintMode(CrPrintMode.ACTIVEX);
    crViewer.setReportSource(rcd.getReportSource());
    crViewer.processHttpRequest(request,response,this.getServletConfig().getServletContext(),null);
 %>查了API中setDataSource(result, "class1", "class")中第二和第三个参数可以为"",那会使用原来的数据,但是我在jsp读取到的报表是空的。
这个函数中,我用的三个表,应该怎么设置后边的两个参数呢???