转自:http://www.blogjava.net/vjame/archive/2013/10/12/404908.html
第一种方式:
sql语句中定义查询条件,报表中定义接收参数第二种方式:JRXML文件里面不用写SQL语句,而是将结果集查询出来经过JRResultSetDataSource转换 2 import java.io.IOException; 3 import java.io.InputStream; 4 import java.sql.Connection; 5 import java.sql.DriverManager; 6 import java.sql.ResultSet; 7 import java.sql.SQLException; 8 import java.sql.Statement; 9 import java.util.HashMap;10 11 import javax.servlet.ServletException;12 import javax.servlet.ServletOutputStream;13 import javax.servlet.http.HttpServlet;14 import javax.servlet.http.HttpServletRequest;15 import javax.servlet.http.HttpServletResponse;16 17 import net.sf.jasperreports.engine.JRException;18 import net.sf.jasperreports.engine.JRResultSetDataSource;19 import net.sf.jasperreports.engine.JasperRunManager;20 21 public class DynamicCreateReportWithServletDateSource extends HttpServlet { 22 23 private static final long serialVersionUID = 1L;24 25 public void doGet(HttpServletRequest request, HttpServletResponse response)26 throws ServletException, IOException { 27 Connection connection = null;28 Statement statument = null;29 ResultSet resultSet = null;30 String sql = "select tb.name as name,tb.age as age,tbs.marks as marks from jaspertb tb join jaspertbs tbs";31 ServletOutputStream servletOutputStream = response.getOutputStream();32 InputStream is = getServletConfig().getServletContext().getResourceAsStream("report\\JasperReportSQLResult.jasper");33 try { 34 Class.forName("com.mysql.jdbc.Driver");35 connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/jasperreportdb","root", "root");36 statument = connection.createStatement();37 resultSet = statument.executeQuery(sql);38 //这里把ResultSet封装到JRResultSetDataSource对象里面了39 JasperRunManager.runReportToPdfStream(is,servletOutputStream,new HashMap(), new JRResultSetDataSource(resultSet));40 response.setContentType("application/pdf");41 servletOutputStream.flush();42 servletOutputStream.close();43 connection.close();44 } catch (ClassNotFoundException e) {45 e.printStackTrace();46 } catch (SQLException e) {47 e.printStackTrace();48 } catch (JRException e) {49 e.printStackTrace();50 }51 }52 53 public void doPost(HttpServletRequest request, HttpServletResponse response)54 throws ServletException, IOException {55 this.doGet(request, response);56 }57 58 }
注意:JRXML文件里面数据库的字段都是用$F{marks},而parameter是用$P{xxxx}表示的 ,而parameter的值都是传过去的那个HashMap里面设置的