我正在制作一个使用参数的报告:
Start date
,end date
和type
(可以是:输入,输出或输入和输出)。
一切正常,直到我尝试获取输入和输出的报告
我已经在很多方面尝试过,我无法获得结果。
报告中的查询:
爪哇:
protected void relEntrada(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
try{
SessionImplementor sim = (SessionImplementor) HibernateUtil.getSessionFactory().openSession();
Connection con = sim.connection();
String tipoMov = request.getParameter("tipMov");
String dataini = request.getParameter("dataini");
String dtini[] = dataini.split("/");
String diai = dtini[0];
String mesi = dtini[1];
String anoi = dtini[2];
String datafim = request.getParameter("datafim");
String dtfim[] = datafim.split("/");
String diaf = dtfim[0];
String mesf = dtfim[1];
String anof = dtfim[2];
HashMap param = new HashMap();
param.put("dataini", anoi +"-"+mesi+"-"+diai + " 00:00:00" );
param.put("datafim", anof +"-"+mesf+"-"+diaf + " 23:59:59" );
if (tipoMov.equalsIgnoreCase("entrada")) {
param.put("tipmov", "entrada" );
} else if(tipoMov.equalsIgnoreCase("saida")) {
param.put("tipmov", "saida" );
} else if(tipoMov.equalsIgnoreCase("entradaesaida")) {
param.put("tipmov", "entrada or tipo = "+'"'+"saida"+'"');
}
InputStream arquivo = getServletContext().getResourceAsStream("/relatorios/RelMoviment.jasper");
byte[] pdf = JasperRunManager.runReportToPdf(arquivo, param ,con);
ServletOutputStream out = response.getOutputStream();
out.write(pdf);
out.flush();
} catch(Exception e) {
e.printStackTrace();
}
}
有人能帮助我吗?
答案 0 :(得分:1)
您需要使用dynamic queries功能。
在您的查询中有:
and he.tipo=$P!{tipmov}
注意$P!
语法
在您的Java代码中有:
if (tipoMov.equalsIgnoreCase("entrada")) {
param.put("tipmov", "'entrada'" );
} else if(tipoMov.equalsIgnoreCase("saida")) {
param.put("tipmov", "'saida'" );
} else if(tipoMov.equalsIgnoreCase("entradaesaida")) {
param.put("tipmov", "'entrada' or he.tipo='saida'");
}
注意每个参数值的单引号转义。
答案 1 :(得分:0)
但我没有打电话的一件事就是! p {} ...我永远不会按照我想要的方式或做三元组....我放了p! {}一切都很酷。