2017-05-19 118 views
-1

我正在報告,使用參數: Start dateend datetype(其可以是:輸入,輸出或輸入和輸出)。直到我試圖讓該得到的輸入和輸出傳爲碧玉雙參數的報告

我試過它在許多方面的報告,我不能得到的結果

,一切工作正常。

查詢在報告:

enter image description here

的Java:

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(); 
} 
} 

有人能幫助我嗎?

+1

你的問題是什麼? –

+0

我得到的結果只有輸入,輸出總和的結果,但我無法得到輸入和輸出的結果......你會怎麼做? – sounobre

回答

0

但是有一件事我沒有打來電話!對於p {} ...我永遠不會按照我想要的方式去做,或者做一個三元組......在我把p放在後面! {}一切都很酷。

1

您需要使用dynamic queries功能。

  1. 在你的查詢有:

    and he.tipo=$P!{tipmov} 
    

    通知$P!語法

  2. 在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'"); 
    } 
    

    通知單引號轉義爲每個參數值。

+0

我得到的結果只有輸入,輸出總和的結果,但我不能得到輸入和輸出的結果......你會怎麼做? – sounobre

+0

也許你需要在括號中包裝查詢的*和*部分。試試:'和(he.tipo = $ P!{tipmov})'看看會發生什麼。 – Narcis