Java 在jasper中将存储过程设置为SQL语句

Java 在jasper中将存储过程设置为SQL语句,java,netbeans,jasper-reports,Java,Netbeans,Jasper Reports,我有一个简单的代码: JasperDesign jDes = JRXmlLoader.load("jasperfile.jrxml"); String sql = "Select * From table WHere address like 'St. Vincents College%'"; JRDesignQuery newQuery = new JRDesignQuery(); newQuery.setText(sql); jDes.setQuery(newQuery); JasperRe

我有一个简单的代码:

JasperDesign jDes = JRXmlLoader.load("jasperfile.jrxml");
String sql = "Select * From table WHere address like 'St. Vincents College%'";
JRDesignQuery newQuery = new JRDesignQuery();
newQuery.setText(sql);
jDes.setQuery(newQuery);
JasperReport jRep = JasperCompileManager.compileReport(jDes);
JasperPrint jPrint = JasperFillManager.fillReport(jasperReport,null,conn);
JasperViewer.viewReport(jPrint);
基本上,这张照片就是报告。我想要的不是
SELECT…
query,而是使用一个存储过程,比如:

ProcedureName:    GenerateReportByAddress
Parameter    :    personName
如何在jasper中使用
CallableStatement

CallableStatement cstmt = con.prepareCall("{call GenerateReportByAddress(?)}");
cstmt.setString(1, "secret");
原因是:

- to make query of application encapsulated by calling only stored procedure
- to avoid SQL Injection. (because some address contains Single Quote)

Jasper Reports
不支持存储过程。临时表是正确的方法。有关更多详细信息,请参阅此博客:

或者,您可以将
Jasper Reports
绑定到不同的数据源。请看这里: