Relatorio web com erro [RESOLVIDO]

18 respostas
D

Ola pessoal!
Gostaria de uma ajuda de vcs. È o seguinte: Tenho uma pagina jsp que o usuario escolhe alguns parametros e pede para gerar um relatorio. Eu montei o relatorio no iReport, compilei, e testei no iReport passando alguns parametros na mao, que no caso funcionou. Eu peguei o .jasper gerado e coloquei no meu projeto. Quando rodo a pagina jsp, esta dando um erro na query sql que prepara alguns parametros para o .jasper, e logo apos o erro sou direcionado para uma pagina contendo o codigo do meu servlet. Estou meio que perdido, pois nunca mexi com relatorios e nem servlets. Por favor, peço que me ajudem, pois ja recorri a tutoriais, e exemplos, mas mesmo assim nao consegui resolver. Abaixo estão os meus codigos.

Primeira Pagina (report_filters.jsp)

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" session="true"	pageEncoding="ISO-8859-1"%>
<%@page import="mcopy.lider.conection.*"%>
<%@page import="java.sql.*"%>
<%@page import="java.util.*"%>
<%@page import="java.text.*"%>
<%@include file="../index_topo.jsp"%>
<script type="text/javascript" src="../JS/POPUP/jquery-latest.pack.js"></script>
<script type="text/javascript" src="../JS/POPUP/jquery-dom.js"></script>
<script type="text/javascript" src="../JS/POPUP/tipos.js"></script>
<script type="text/javascript" src="../JS/POPUP/popup.js"></script>
<script type="text/javascript">
<!--
function mascaraData(objeto, evt){
	
	if(objeto.value.length == 10){
		return false;
	}
	var charCode = (evt.which) ? evt.which : event.keyCode;		
	if (charCode > 31 && (charCode < 48 || charCode > 57))
        return false;
	if (objeto.value.indexOf("/") == -1 && objeto.value.length > 5){ objeto.value = ""; }
	if ((objeto.value.length == 2 || objeto.value.length == 5)&& charCode != 8){
		objeto.value +="/";
	}
	return true;
}

//-->
</script>
<center style="position: relative">
<table width="700" align="center" cellpadding="1" cellspacing="1">
	<tr style="background-color: #363636;">
		<td height="30" width="100%" colspan="3" align="center" class="texto_normal">FILTRO GERAL DE RELATORIOS</td>
	<tr style="background-color: #1C1C1C;" class="texto_normal_small" align="center">
		<td height="10" width="200"><a href="#" onclick="popup.show();">RELATORIO POR USUARIO</a></td>
		<td height="10" width="300"><a href="report_">RELATORIO POR	CENTRO DE CUSTO</a></td>
		<td height="10" width="200"><a href="report_">RELATORIO MISTO</a></td>
</table>
<div id="popup">
<div class="conteudo">
<table width="700" align="center" cellpadding="1" cellspacing="1">
	<tr>
	<form id="form1" name="form1" method="post" action="report_usuarios.jsp">
		<tr style="background-color: #363636;">
			<td height="30" width="100%" align="left" class="texto_normal">Filtro de Usuarios</td>
		</tr>
		<tr class="texto_normal_small" align="center">
			<td height="10" width="400" align="left">Selecione: 
			<select name="user">
				<option value="" selected="selected">Usuario</option>
				<%
					String sql = "SELECT * FROM USERS ORDER BY LOGIN ";
					ConexaoBD conn = null;
					PreparedStatement ps = null;
					ResultSet rs = null;
					String username = "";
					int matricula = 0;
					conn = new ConexaoBD(ConfiguracoeBDDAO.LOGIN,ConfiguracoeBDDAO.SENHA, ConfiguracoeBDDAO.DRIVER,	ConfiguracoeBDDAO.URL);
					conn.conectar();
					ps = conn.getStatement(sql);
					rs = ps.executeQuery();
					while (rs.next()) {
						matricula = rs.getInt("MATRICULA");
						username = rs.getString("LOGIN");
				%>
				<option value="<%=username%>"><%=username%></option>
				<%
					}
				%>
		</select>
		</td>
		<tr class="texto_normal_small" >
			<td colspan="5">Período:  
             	<input type=text name="datainicio" id="datainicio" size="12"  align="left" onkeypress="return mascaraData(this, event);">
		 		&nbsp; a &nbsp;
				<input type="Text" name="datafinal" id="datafinal" size="12"  align="left" onkeypress="return mascaraData(this, event);" > 
		</td>
		</tr>
		<tr>
			<td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
				<input type="submit" value="Gerar Relatorio" class="button">
			</td>
		</tr>
	</form>
	</tr>
</table>
</div>
</div>
<script type="text/javascript">
	//<![CDATA[
		var popup = new Popup("popup",300,300);
		popup.setTitle("Relatorio por Usuarios");
		popup.init();
	//]]>
	</script>
</center>

<%@include file="../index_fundo.jsp"%>

Segunda Pagina (report_usuarios.jsp)

<%@ page import="net.sf.jasperreports.view.*"%>
<%@ page import="net.sf.jasperreports.engine.*"%>
<%@ page import="java.util.*"%>
<%@ page import="java.io.*"%>
<%@ page import="javax.sql.*"%>
<%@ page import="java.sql.*,java.net.*"%>
<%@ page import="javax.naming.*"%>
<%@ page import="java.lang.String"%>
<%@ page import="java.sql.*"%>
<%@ page import="mcopy.lider.conection.ConexaoReport"%>
<%@ page session="true"%>
<%@ page import="java.text.DateFormat,java.text.SimpleDateFormat,java.util.Date"%>
<%@ page import="mcopy.lider.conection.*"%>
<%@ page import="java.sql.*"%>
<%@ page import="java.util.*"%>
<%@ page import="java.text.*"%>
<%
	String username = request.getParameter("user");
	String data1 = request.getParameter("datainicio").toString();
	String data2 = request.getParameter("datafinal").toString();


	ConexaoBD conn2 = null;
	PreparedStatement ps2 = null;
	ResultSet rs2 = null;
	conn2 = new ConexaoBD(ConfiguracoeBDDAO.LOGIN,ConfiguracoeBDDAO.SENHA, ConfiguracoeBDDAO.DRIVER,ConfiguracoeBDDAO.URL);
	conn2.conectar();
	ps2 = conn2.getStatement("SELECT * FROM USERS WHERE LOGIN = ?");
	ps2.setString(1, username);
	System.out.println("Usuario "+username+"\n");
	rs2 = ps2.executeQuery();
	String cc = "";
	if(rs2.next()){
		cc = rs2.getString("CC"); //Pega o codigo de centro de custo do usuario selecionado.
	}
	System.out.println("Centro custo "+cc+"\n");

	String[] cc_split = cc.split("");//Splita o codigo do centro de custo
	System.out.println("CC split "+cc_split[1]+"\n");
	String centro_custo_aplit = (cc_split[1]); // Pega o primeiro caracter do codigo, que representa o nome do centro de custo
	String cc_para_consulta = centro_custo_aplit + "00"; // Concatena o codigo centro de custo com 00 para fazer a consulta na tabela "Centro_Custo" e retornar o nome do centro de custo

	ConexaoBD conn3 = null;
	PreparedStatement ps3 = null;
	ResultSet rs3 = null;
	conn3 = new ConexaoBD(ConfiguracoeBDDAO.LOGIN,ConfiguracoeBDDAO.SENHA, ConfiguracoeBDDAO.DRIVER, ConfiguracoeBDDAO.URL);
	conn3.conectar();
	ps3 = conn3.getStatement("SELECT * FROM CENTRO_CUSTO WHERE CC = ?");
	ps3.setString(1, cc_para_consulta);
	rs3 = ps3.executeQuery();
	String cc_completo = "";
	rs3.next();
	cc_completo = rs3.getString("DESCRICAO"); //Pega o nome do centro de custo na tabela Centro_Custo
	System.out.println(" Centro de custo completo "+cc_completo+"\n");
	
		
	ConexaoBD conn4 = null;
	PreparedStatement ps4 = null;
	ResultSet rs4 = null;
	int cont=0;
	int cont_pag = 0;
	int total_pag = 0;
	float cont_valor =0;
	float total_valor =0;
	int total_jobs = 0;
	conn4 = new ConexaoBD(ConfiguracoeBDDAO.LOGIN,ConfiguracoeBDDAO.SENHA, ConfiguracoeBDDAO.DRIVER, ConfiguracoeBDDAO.URL);
	conn4.conectar();
	String sql_totais= "SELECT SUM(BHZ.PAGES) AS TOTAL_PAG, SUM(BHZ.DOCCOST) AS VALOR_TOTAL, COUNT(*) AS TOTAL_JOBS, BHZ.UNIDADE FROM BASE_BHZ BHZ WHERE BHZ.USERNAME = '"+username+"' AND BHZ.SUBMITDATE between '"+data1+"' and '"+data2+"' GROUP BY BHZ.SERVERNAME, BHZ.UNIDADE ";
  	sql_totais+= " UNION (SELECT SUM(BSB.PAGES), SUM(BSB.DOCCOST), COUNT(*), BSB.UNIDADE  FROM BASE_BSB BSB WHERE BSB.USERNAME = '"+username+"' and BSB.SUBMITDATE between '"+data1+"' and '"+data2+"' GROUP BY BSB.SERVERNAME, BSB.UNIDADE) ";
	sql_totais+= " UNION (SELECT SUM(JAC.PAGES), SUM(JAC.DOCCOST), COUNT(*), JAC.UNIDADE  FROM BASE_JAC JAC WHERE JAC.USERNAME = '"+username+"' and JAC.SUBMITDATE between '"+data1+"' and '"+data2+"' GROUP BY JAC.SERVERNAME, JAC.UNIDADE) ";
	sql_totais+= " UNION (SELECT SUM(MEA.PAGES), SUM(MEA.DOCCOST), COUNT(*), MEA.UNIDADE  FROM BASE_MEA MEA WHERE MEA.USERNAME = '"+username+"' and MEA.SUBMITDATE between '"+data1+"' and '"+data2+"' GROUP BY MEA.SERVERNAME, MEA.UNIDADE) ";
	sql_totais+= " UNION (SELECT SUM(NVT.PAGES), SUM(NVT.DOCCOST), COUNT(*), NVT.UNIDADE  FROM BASE_NVT NVT WHERE NVT.USERNAME = '"+username+"' and NVT.SUBMITDATE between '"+data1+"' and '"+data2+"' GROUP BY NVT.SERVERNAME, NVT.UNIDADE) ";
	sql_totais+= " UNION (SELECT SUM(RIO.PAGES), SUM(RIO.DOCCOST), COUNT(*), RIO.UNIDADE  FROM BASE_RIO RIO WHERE RIO.USERNAME = '"+username+"' and RIO.SUBMITDATE between '"+data1+"' and '"+data2+"' GROUP BY RIO.SERVERNAME, RIO.UNIDADE) ";
    sql_totais+= " UNION (SELECT SUM(SAO.PAGES), SUM(SAO.DOCCOST), COUNT(*), SAO.UNIDADE  FROM BASE_SAO SAO WHERE SAO.USERNAME = '"+username+"' and SAO.SUBMITDATE between '"+data1+"' and '"+data2+"' GROUP BY SAO.SERVERNAME, SAO.UNIDADE) ";
	sql_totais+= " UNION (SELECT SUM(TME.PAGES), SUM(TME.DOCCOST), COUNT(*), TME.UNIDADE  FROM BASE_TME TME WHERE TME.USERNAME = '"+username+"' and TME.SUBMITDATE between '"+data1+"' and '"+data2+"' GROUP BY TME.SERVERNAME, TME.UNIDADE) ";
	sql_totais+= " UNION (SELECT SUM(VIX.PAGES), SUM(VIX.DOCCOST), COUNT(*), VIX.UNIDADE  FROM BASE_VIX VIX WHERE VIX.USERNAME = '"+username+"' and VIX.SUBMITDATE between '"+data1+"' and '"+data2+"' GROUP BY VIX.SERVERNAME, VIX.UNIDADE) ";
	try{
		ps4 = conn4.getStatement(sql_totais);
		try{
			rs4 = ps4.executeQuery(); ///[color=red] Fiz um debug, e quando entro nesse ponto o programa da um erro(codigo_erro abaixo), ja testei a query no SQL SERVER e ela me retorna exatamente o que eu quero[/color]
			while (rs4.next()){
				cont_pag = rs4.getInt("TOTAL_PAG");
				total_pag = total_pag + cont_pag;
				cont_valor = rs4.getFloat("VALOR_TOTAL");
				total_valor = total_valor + cont_valor;
				total_jobs = rs4.getInt("TOTAL_JOBS");
			}
		}catch(Exception ex){
			ex.printStackTrace();
			System.out.println("Erro ao ..."+ex);
		}
		
	}catch(SQLException e){
		e.printStackTrace();
		System.out.println("Erro sql_totais>>"+e);
	}
	
	NumberFormat nf = new DecimalFormat("###,##0.00");  
	String valor_format = nf.format(total_valor);  
	
	String centro_custo = cc_completo;

	session.setAttribute("USERNAME", username);
	session.setAttribute("DATA1", data1);
	session.setAttribute("DATA2", data2);
	session.setAttribute("CC", centro_custo);
	//session.setAttribute("QUERY", sql_report);
	session.setAttribute("TOTAL_PAG", total_pag);
	session.setAttribute("TOTAL_VALOR", valor_format);
	session.setAttribute("TOTAL_JOBS", total_jobs);
	response.sendRedirect("ServletRelatorio.java"); [color=red] // Redireciona para meu Sevlet o qual processa os dados e gera o relatorio[/color]
	
%>

Servlet (ServletRelatorio.java)

package mcopy.lider.servlet;

import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.Timestamp;
import java.util.Date;
import java.util.HashMap;
import java.util.Locale;
import java.util.Map;

import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.engine.JasperRunManager;
import net.sf.jasperreports.engine.util.JRLoader;
import mcopy.lider.conection.*;

/**
 * Servlet implementation class for Servlet: ServletRelatorio
 *
 */
 public class ServletRelatorio extends javax.servlet.http.HttpServlet implements javax.servlet.Servlet {
   static final long serialVersionUID = 1L;
   
    /* (non-Java-doc)
	 * @see javax.servlet.http.HttpServlet#HttpServlet()
	 */
	public ServletRelatorio() {
		super();
	}   	
	
	/* (non-Java-doc)
	 * @see javax.servlet.http.HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		executaAcao(request, response);
	}  	
	
	/* (non-Java-doc)
	 * @see javax.servlet.http.HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		executaAcao(request, response);
	}   
	
	@SuppressWarnings({ "unchecked", "deprecation" })
	public void executaAcao(HttpServletRequest request, HttpServletResponse response) throws IOException{
		Locale.setDefault(new Locale("pt", "br"));
		
		HashMap<String, String>global = (HashMap<String, String>)request.getSession().getAttribute("global");
		ConexaoReport conexao = new ConexaoReport();
		Connection conn = null;
		
		try {
			conn = conexao.getConnection();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			System.out.println("Erro ao criar conexão!");
			e.printStackTrace();
		}		
		
		String pathJasper = getServletContext().getRealPath("/WebContent/REPORT/")+ "/";
		// A variavel path armazena o caminho real para o contexto
		// isso é util pois o seu web container pode estar instalado em lugares diferentes
		String path = getServletContext().getRealPath("/");
		
		String username = (String)request.getSession().getAttribute("USERNAME");
		Date DATA1 = (Date)request.getSession().getAttribute("DATA1");
		Date DATA2 = (Date)request.getSession().getAttribute("DATA2");
		String centro_custo = (String)request.getSession().getAttribute("CC");
		int total_pag = (Integer)request.getSession().getAttribute("TOTAL_PAG");
		int total_jobs = (Integer)request.getSession().getAttribute("TOTAL_JOBS");
		float total_valor = (Float)request.getSession().getAttribute("TOTAL_VALOR");
		
			
		//Parametros
		Map parametros = new HashMap();
		//parametros.put("QUERY", query);
		parametros.put("DATA1", DATA1);     
		parametros.put("DATA2", DATA2);     
		parametros.put("CC", centro_custo);  
		parametros.put("USERNAME", username);
		parametros.put("TOTAL_PAG", total_pag);
		parametros.put("TOTAL_VALOR", total_valor);
		parametros.put("TOTAL_JOBS", total_jobs);
		
		JasperReport jasperReport;
		try {
			// Aqui ele cria o relatório
			JasperPrint impressao = JasperFillManager.fillReport(pathJasper	+ "RelatorioUsuario.jasper", parametros, conn);

			// Grava o relatório em disco em pdf
			JasperManager.printReportToPdfFile(impressao, path	+ "/RelatorioUsuario.pdf");
		
			// Redireciona para o pdf gerado
			response.sendRedirect("RelatorioUsuario.pdf");
		} catch (JRException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}		
		
				
	}
}

Erro gerado no console:

java.sql.SQLException: O tipo de dados de operando varchar é inválido para o operador sum.
	at net.sourceforge.jtds.jdbc.SQLDiagnostic.addDiagnostic(SQLDiagnostic.java:368)
	at net.sourceforge.jtds.jdbc.TdsCore.tdsErrorToken(TdsCore.java:2820)
	at net.sourceforge.jtds.jdbc.TdsCore.nextToken(TdsCore.java:2258)
	at net.sourceforge.jtds.jdbc.TdsCore.getMoreResults(TdsCore.java:632)
	at net.sourceforge.jtds.jdbc.JtdsStatement.executeSQLQuery(JtdsStatement.java:477)
	at net.sourceforge.jtds.jdbc.JtdsPreparedStatement.executeQuery(JtdsPreparedStatement.java:778)
	at org.apache.jsp.REPORT.report_005fusuarios_jsp._jspService(report_005fusuarios_jsp.java:170)
	at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
	at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:374)
	at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342)
	at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:454)
	at java.lang.Thread.run(Unknown Source)
Erro ao ..java.sql.SQLException: O tipo de dados de operando varchar é inválido para o operador sum.

Alguem saberia me dizer qual o problema da query “sql_totais” na pagina report_usuarios, e porque que ao inves de gerar meu relatorio o programa esta exibindo meu codigo java?
Bom, desde ja agradeço pela ajuda pessoal.

18 Respostas

A
java.sql.SQLException: O tipo de dados de operando varchar é inválido para o operador sum.

tu ta tentando somar Strings, e isso não rola sem uma conversão. Encontra os valores que tu ta somando e transforma em integer (Integer.parseInt(String)), se precisar de transformar de volta para String, String.valueOf(i);

D

Bom fiz a conversao na pagina report_usuarios.jsp desta maneira:

ps4 = conn4.getStatement(sql_totais);
		try{
			rs4 = ps4.executeQuery();
			while (rs4.next()){
				cont_pag = Integer.parseInt(rs4.getString("TOTAL_PAG"));
				total_pag = total_pag + cont_pag;
				cont_valor = Integer.parseInt(rs4.getString("VALOR_TOTAL"));
				total_valor = total_valor + cont_valor;
				total_jobs = Integer.parseInt(rs4.getString("TOTAL_JOBS"));
                                                                   .
                                                                   .
                                                                   .

Porem ainda nao obtive resultado e sim o erro:

java.sql.SQLException: O tipo de dados de operando varchar é inválido para o operador sum.
	at net.sourceforge.jtds.jdbc.SQLDiagnostic.addDiagnostic(SQLDiagnostic.java:368)
	at net.sourceforge.jtds.jdbc.TdsCore.tdsErrorToken(TdsCore.java:2820)
	at net.sourceforge.jtds.jdbc.TdsCore.nextToken(TdsCore.java:2258)
	at net.sourceforge.jtds.jdbc.TdsCore.getMoreResults(TdsCore.java:632)
	at net.sourceforge.jtds.jdbc.JtdsStatement.executeSQLQuery(JtdsStatement.java:477)
	at net.sourceforge.jtds.jdbc.JtdsPreparedStatement.executeQuery(JtdsPreparedStatement.java:778)
	at org.apache.jsp.REPORT.report_005fusuarios_jsp._jspService(report_005fusuarios_jsp.java:170)
	at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
	at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:374)
	at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342)
	at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:454)
	at java.lang.Thread.run(Unknown Source)
Erro ao ..java.sql.SQLException: O tipo de dados de operando varchar é inválido para o operador sum.

E no final ao inves de gerar o relatorio(mesmo estando com erro) ele me direciona para a pagina http://localhost:8080/Lider/REPORT/ServletRelatorio.java mostrando o codigo do meu servlet.
Poxa o que eu devo estar fazendo errado?
Meu web.xml esta correto?
web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
  <display-name>Lider</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  <servlet>
    <description></description>
    <display-name>ServletRelatorio</display-name>
    <servlet-name>ServletRelatorio</servlet-name>
    <servlet-class>mcopy.lider.servlet.ServletRelatorio</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>ServletRelatorio</servlet-name>
    <url-pattern>/ServletRelatorio</url-pattern>
  </servlet-mapping>
</web-app>
D

Alguem me ajuda, pelo amor de Deus!?
Estou enroladasso com esse problema pessoal. Por favor.

U

O campo em seu Banco tem q ser Vachar? nao pode ser Integer nao?!
vlw
abs

D

Bom, consegui resolver um problema: o erro do sql que estava dando, eu substitui a query que fazia o select e alimentava minhas variaveis por variaveis criadas no proprio relatorio, porem meu relatorio nao é gerado quando faço a requisição pelo report_filters.jsp, continua mostrando apenas o codigo do meu ServletRelatorio.
O ServletRelatorio esta correto? pois nao me mostra mais nenhum erro na execução do mesmo.
Nao sei se ele esta gerando o relatorio, e se estiver, nao esta indo para o diretorio que eu designei.
Como resolvo isto pessoa? alguem sabe?
Obrigado

U

Cara vc ta chamando o metodo executaAcao no doGet e doPost chame apenas um de cada ou no doGet ou doPost e veja o resultado!
vlw
abs

D

Poxa, modifiquei o metodo e nada, ainda estou com o problema de execução do servlet e direcionamento de paginas, o problema descrito acima ainda persiste. Alguem poderia me dar uma ajuda, por que infelizmente ainda nao consegui resolver. Obrigado.

U

Qual o erro q ta dando em exato agora???
vlw
abs

D

O sistema roda blz, mas quando peço para gerar o relatorio ele simplesmente me direciona para o ServletRelatorio e nao gera o pdf, mostrando somente o codigo do servlet. Esta faltando alguma coisa no servlet?
Obrigado.

D

Modifiquei algumas coisas. Ficou assim agora:
report_filter.jsp(Chama o relatorio)

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" session="true" pageEncoding="ISO-8859-1"%>
<%@page import="java.sql.*"%>
<%@page import="java.util.*"%>
<%@page import="java.text.*"%>
<%@page import="br.com.conection.ConexaoBD"%>
<%@page import="br.com.conection.ConfiguracoeBDDAO"%>
<%@include file="../index_topo.jsp"%>

<script type="text/javascript" src="../JS/scriptsLider.js"></script>
<link type="text/css" href="../CSS/teste/css/custom-theme/jquery-ui-1.7.2.custom.css" rel="stylesheet" />
<script type="text/javascript" src="../CSS/teste/js/jquery-1.3.2.min.js"></script>
<script type="text/javascript" src="../CSS/teste/js/jquery-ui-1.7.2.custom.min.js"></script>

<script type="text/javascript">

    function abreRelatorio(){
	
        popUp("../ReportUsuario", 800, 600, 1);
    }

    $(function(){

        // Accordion
        $("#accordion").accordion({ header: "h3" });
        //Datepicker
        $('#datepicker').datepicker({ dateFormat: 'dd/mm/yy' });

        $('#datepicker2').datepicker({ dateFormat: 'dd/mm/yy'  });

    });
</script>

<style type="text/css">
    /*demo page css*/
    body{ font: 62.5% "Trebuchet MS", sans-serif; margin: 50px;}
    .demoHeaders { margin-top: 2em; }

</style>
<div style="width:1000px;">
<h2 class="demoHeaders"></h2>
<span class="texto_normal">Filtros Relatorios</span>
<div id="accordion">
    <div>

        <h3><a href="#">RELATORIO POR USUARIO</a></h3>
        <div>
            <span>
                <select name="user">Selecione:
                    <option value="" selected="selected">Usuario</option>
                    <%
                        String sql = "SELECT * FROM USERS ORDER BY LOGIN ";
                        ConexaoBD conn = null;
                        PreparedStatement ps = null;
                        ResultSet rs = null;
                        String username = "";
                        int matricula = 0;
                        conn = new ConexaoBD(ConfiguracoeBDDAO.LOGIN, ConfiguracoeBDDAO.SENHA, ConfiguracoeBDDAO.DRIVER, ConfiguracoeBDDAO.URL);
                        conn.conectar();
                        ps = conn.getStatement(sql);
                        rs = ps.executeQuery();
                        while (rs.next()) {
                        matricula = rs.getInt("MATRICULA");
                        username = rs.getString("LOGIN");
                    %>
                    <option value="<%=username%>"><%=username%></option>
                    <%
}
                    %>
                </select>
            </span>


            <span>Período:

                <input type="text" name="datainicio" id="datepicker" size="10" maxlength="10"/>

                &nbsp; a &nbsp;
                <input type="Text" name="datafinal" id="datepicker2" size="10"  maxlength="10" >
            </span>

            <span>
                <input type="button" value="Visualizar Relatorio" name="B1" onClick="abreRelatorio()">
            </span>
        </div>
    </div>
    
    </div>

</div>
</div>

ReportUsuario.java (Pega os parametros do report_filters.jsp e baseado neles faz algumas consultas no banco e joga na sessao)

package br.com.report;

import java.io.IOException;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import br.com.conection.ConexaoBD;
import br.com.conection.ConfiguracoeBDDAO;

/**
 * Servlet implementation class ReportUsuario
 */
public final class ReportUsuario extends HttpServlet {
	private static final long serialVersionUID = 1L;

    /**
     * @see HttpServlet#HttpServlet()
     */
    public ReportUsuario() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		executa(request, response);
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
   /*protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            // TODO Auto-generated method stub
            executa(request, response);
    }
*/
    private void executa(HttpServletRequest request, HttpServletResponse response){
            String arquivo = getServletContext().getRealPath("/") + "REPORT\\RelatorioUsuario.jasper";
            String username = request.getParameter("user");
            System.out.println("Usuario "+username+"\n");
            String data1 = request.getParameter("datainicio").toString();
            String data2 = request.getParameter("datafinal").toString();

            ConexaoBD conn2 = null;
            PreparedStatement ps2 = null;
            ResultSet rs2 = null;
            String cc = "";
            conn2 = new ConexaoBD(ConfiguracoeBDDAO.LOGIN,ConfiguracoeBDDAO.SENHA, ConfiguracoeBDDAO.DRIVER,ConfiguracoeBDDAO.URL);
            conn2.conectar();
            try{
                    ps2 = conn2.getStatement("SELECT * FROM USERS WHERE LOGIN = ?");
                    ps2.setString(1, username);
                    System.out.println("Usuario "+username+"\n");
                    rs2 = ps2.executeQuery();

                    if(rs2.next()){
                            cc = rs2.getString("CC"); //Pega o codigo de centro de custo do usuario selecionado.
                    }

            }catch(Exception exc){
                    exc.printStackTrace();
                    System.out.println("Erro ao concetar em USERS");
            }
            System.out.println("Centro custo "+cc+"\n");
            String[] cc_split = cc.split("");//Splita o codigo do centro de custo
            System.out.println("CC split "+cc_split[1]+"\n");
            String centro_custo_aplit = (cc_split[1]); // Pega o primeiro caracter do codigo, que representa o nome do centro de custo
            String cc_para_consulta = centro_custo_aplit + "00"; // Concatena o codigo centro de custo com 00 para fazer a consulta na tabela "Centro_Custo" e retornar o nome do centro de custo


            ConexaoBD conn3 = null;
            PreparedStatement ps3 = null;
            ResultSet rs3 = null;
            String cc_completo = "";
            conn3 = new ConexaoBD(ConfiguracoeBDDAO.LOGIN,ConfiguracoeBDDAO.SENHA, ConfiguracoeBDDAO.DRIVER, ConfiguracoeBDDAO.URL);
            conn3.conectar();
            try{
                    ps3 = conn3.getStatement("SELECT * FROM CENTRO_CUSTO WHERE CC = ?");
                    ps3.setString(1, cc_para_consulta);
                    rs3 = ps3.executeQuery();

                    rs3.next();
                    cc_completo = rs3.getString("DESCRICAO"); //Pega o nome do centro de custo na tabela Centro_Custo
                    System.out.println(" Centro de custo completo "+cc_completo+"\n");
            }catch(Exception ex){
                    ex.printStackTrace();
                    System.out.println("Erro ao concetar em CENTRO_CUSTO");
            }

            String centro_custo = cc_completo;


            try {
                    request.getSession().setAttribute("username", username);
                    request.getSession().setAttribute("data1", data1);
                    request.getSession().setAttribute("data2", data2);
                    request.getSession().setAttribute("arquivo", arquivo);
                    request.getSession().setAttribute("centro_custo", centro_custo);
                    response.sendRedirect("ServletRelatorio");
            } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
            }
    }

}

SevletRelatorio.java(Responsavel por gerar o relatorio)

package br.com.servlet;

import br.com.conection.*;

import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.Locale;
import java.util.Map;

import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.engine.JasperRunManager;
import net.sf.jasperreports.engine.util.JRLoader;

/**
 * Servlet implementation class ServletRelatorio
 */
public class ServletRelatorio extends javax.servlet.http.HttpServlet implements javax.servlet.Servlet {

    static final long serialVersionUID = 1L;

    /* (non-Java-doc)
     * @see javax.servlet.http.HttpServlet#HttpServlet()
     */
    public ServletRelatorio() {
        super();
    }

    /* (non-Java-doc)
     * @see javax.servlet.http.HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        executaAcao(request, response);
    }

    /* (non-Java-doc)
     * @see javax.servlet.http.HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        executaAcao(request, response);
    }

    public void executaAcao(HttpServletRequest request, HttpServletResponse response) {
        Locale.setDefault(new Locale("pt", "br"));

        ConexaoBD conexao = new ConexaoBD(ConfiguracoeBDDAO.LOGIN, ConfiguracoeBDDAO.SENHA, ConfiguracoeBDDAO.DRIVER, ConfiguracoeBDDAO.URL);
        Connection conn = null;

        try {
            conn = conexao.getConexao();
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            System.out.println("Erro ao criar conex&#65533;o!");
            e.printStackTrace();
        }

        String arquivo = (String) request.getSession().getAttribute("arquivo");
        String username = request.getParameter("username");
        String data1 = request.getParameter("data1").toString();
        String data2 = request.getParameter("data2").toString();
        String centro_custo = request.getParameter("centro_custo").toString();

        // par&#65533;metros, se houverem
        Map parametros = new HashMap();
        parametros.put("DATA1", data1);
        parametros.put("DATA2", data2);
        parametros.put("CC", centro_custo);
        parametros.put("USERNAME", username);

        File reportFile = new File(arquivo);
        JasperReport jasperReport;
        byte[] bytes = null;
        try {
            jasperReport = (JasperReport) JRLoader.loadObject(reportFile.getPath());
            bytes = JasperRunManager.runReportToPdf(jasperReport, parametros, conn);
        } catch (JRException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }

        JasperPrint jasperPrint = null;
        String trataErro = "";
        try {
            jasperReport = (JasperReport) JRLoader.loadObject(reportFile.getPath());
            jasperPrint = JasperFillManager.fillReport(jasperReport, parametros, conn);

            if (jasperPrint.getPages().size() == 0) {
                trataErro = "Nenhum Registro foi Encontrado!";
            }
        } catch (Exception e) {
        }

        if (trataErro.equals("")) {
            response.setContentType("application/pdf");
            response.setContentLength(bytes.length);
            ServletOutputStream ouputStream = null;
            try {
                ouputStream = response.getOutputStream();
            } catch (IOException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }
            try {
                ouputStream.write(bytes, 0, bytes.length);
                ouputStream.flush();
                ouputStream.close();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        } else {
            PrintWriter out = null;
            try {
                out = response.getWriter();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            out.println("<center><br><br><br><br><br><br><br><br><br><br><font color='red'>" + trataErro + "</font></center><br><center><a href='javascript:window.close();'>Voltar</a></center>");
        }

        request.getSession().removeAttribute("arquivo");
        request.getSession().removeAttribute("parameters");

    }
}

Mesmo assim ainda continua dando erro :

HTTP Status 500 -

type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

java.lang.NullPointerException
	br.com.report.ReportUsuario.executa(ReportUsuario.java:50)
	br.com.report.ReportUsuario.doGet(ReportUsuario.java:35)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
	org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:390)

note The full stack trace of the root cause is available in the Apache Tomcat/6.0.18 logs.
Apache Tomcat/6.0.18

Poxa, o que eu faço agora? Ja mudei esses codigos diversas vezes e todas dao errro. Alguem poderia me ajudar a solucionar este problema? Estou arruinado de tanto quebrar a cabeça e nada.
Obrigado ai pessoal.

U

na função abre relatorio passa co camino do package completo!!

seu erro quer dizer que a classe nao foi encotrada ou n existe!!
vlw

A

UMC, a classe existe, senão seria ClassNotFoundException…

Este é um erro NullPointerException, vamos ler o stack trace?

Bom, de baixo pra cima, veja a primeira classe do seu sistema que aparece:

br.com.report.ReportUsuario.doGet(ReportUsuario.java:35)

O que tem nessa linha nos informando? Um NullPointerException na linha 35 da classe ReportUsuario.java. Vamos lá ver o que tem?

executa(request, response);

Humm, estranho. Apenas a chamada de um método… Vamos continuar lendo o stack trace?

br.com.report.ReportUsuario.executa(ReportUsuario.java:50)

Bom, mesma classe, linha 50. Nossa que coincidência! Esta linha está dentro do método executa (req,res) que foi mostrado anteriormente! ehehehe
Vamos ver o que tem nela:

String data1 = request.getParameter("datainicio").toString();

Bingo! Oras… datainicio é a variável do datepicker. O que esse datepicker retorna? Uma String ‘dd/mm/AAAA’ ? Não importa, só sei que ele tá retornando algo nulo ou então alguma coisa que o método toString() não suporta.

Veja aí se consegue arrumar amigo!

Abraços.

edit.: provávelmente o erro acontecerá na próxima linha após o sr. consertar a 50, pois a 51 é idêntica. Não arrume tudo de uma só vez, veja se é isso mesmo e nos informa. Abraços.

D

Era isso, estava vindo nulo mesmo, ai eu arrumei e agora esta pegando os valores. Mas ainda da um erro de conversao das datas, no relatorio os campos que irao receber os parametros data1 e data2 sao Timestamp, logo eu teria que converter as Strings data1 e data2 que eu estou pegando da sessao no ServletRelatorio para Timestamp. Ai eu fiz assim:
ServletRelatorio.java

String arquivo = (String) request.getSession().getAttribute("arquivo");
        String username = (String) request.getSession().getAttribute("username");
        String data1 = (String) request.getSession().getAttribute("data1");
        String data2 = (String) request.getSession().getAttribute("data2");
        String centro_custo = (String) request.getSession().getAttribute("centro_custo");


         // Bloco que converte as Strings em Timestamp
          DateFormat formatter ;
          Date da1 ;
          Date da2;
          formatter = new SimpleDateFormat("dd-MM-yyyy");
              da1 = (Date)formatter.parse(data1);
              da2 = (Date)formatter.parse(data2);
          java.sql.Timestamp date1 = new Timestamp(da1.getTime());
          java.sql.Timestamp date2 = new Timestamp(da2.getTime());
          System.out.println("A data1 e: " +date1+"\n"+"A data 2 e "+date2);
          //Fim do bloco
          //O resto do codigo continua a mesma coisa

Bom quando peço pra executar ele me retorna um erro de conversao :

20/01/2010 16:00:21 br.com.servlet.ServletRelatorio doGet
SEVERE: null
O erro e java.text.ParseException: Unparseable date: "01/07/2009" //>>Esta e a data que eu escolhi no datepicker
java.text.ParseException: Unparseable date: "01/07/2009"
        at java.text.DateFormat.parse(DateFormat.java:337)
        at br.com.servlet.ServletRelatorio.executaAcao(ServletRelatorio.java:111)
        at br.com.servlet.ServletRelatorio.doGet(ServletRelatorio.java:53)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:390)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
        at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
        at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
        at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
        at java.lang.Thread.run(Thread.java:619)

Ja procurei uma forma de arrumar isso e nao achei, todos os metodos que eu utilizei para converter esta data eu nao consigo, sempre retorna o mesmo erro.
Como faço para fazer essa maldita conversao de data?
Agradecido.

A

Neste caso, deixa essa sua aplicação de lado, cria um novo projeto no Eclipse, cria uma classe com um main, pega um livro Deitel ou mesmo o SJCP, e vai vendo os métodos Parse que são válidos pra usar com esse formato até encontrar a solução. Será melhor do que alguém te informar algo pronto, você aprenderá muito mais.
Faz tudo com Sysout mesmo…

Abraços.

D

Cara, valeu pela sua opnião, mas isso nao posso fazer, pois tenho que entregar isso pronto ate amanha. Estou quebrando a cabeça pra resolver aqui, mas encontro dificuldades em algumas coisas, por exemplo essas que eu coloquei aqui. Nunca mexi com relatorio web, e por isso algums problemas nao consigo resolver e posto aqui pra poder receber uma ajuda e nao algo pronto. Fico grato por ter respondido, mas nao resolveu meu problema. Espero que nao me um leve mal.
Bom ainda continuo com o problema e peço que se puderem me ajudar, ficarei grato. Obrigado

F

Você vai ter que fazer o parse dessa data com essa máscara dd/MM/yyyy

D

Bom, coloquei desta forma:

DateFormat formatter ;
          Date da1 ;
          Date da2;
          formatter = new SimpleDateFormat("dd/MM/yyyy");
              da1 = (Date)formatter.parse(data1);
              da2 = (Date)formatter.parse(data2);
          java.sql.Timestamp date1 = new Timestamp(da1.getTime());
          java.sql.Timestamp date2 = new Timestamp(da2.getTime());
          System.out.println("A data1 e: " +date1+"\n"+"A data 2 e "+date2);

Mas quando faço isso, da um outro erro no sql do relatorio:

A data1 e: 2009-11-02 00:00:00.0
A data 2 e 2010-01-11 00:00:00.0
net.sf.jasperreports.engine.JRException: Error executing SQL statement for : RelatorioUsuario
        at net.sf.jasperreports.engine.query.JRJdbcQueryExecuter.createDatasource(JRJdbcQueryExecuter.java:141)
        at net.sf.jasperreports.engine.fill.JRFillDataset.createQueryDatasource(JRFillDataset.java:681)
        at net.sf.jasperreports.engine.fill.JRFillDataset.initDatasource(JRFillDataset.java:601)
        at net.sf.jasperreports.engine.fill.JRBaseFiller.setParameters(JRBaseFiller.java:1247)
        at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:877)
        at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:826)
        at net.sf.jasperreports.engine.fill.JRFiller.fillReport(JRFiller.java:59)
        at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:417)
        at net.sf.jasperreports.engine.JasperRunManager.runReportToPdf(JasperRunManager.java:281)
        at br.com.servlet.ServletRelatorio.executaAcao(ServletRelatorio.java:132)
        at br.com.servlet.ServletRelatorio.doGet(ServletRelatorio.java:53)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:390)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
        at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
        at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
        at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
        at java.lang.Thread.run(Thread.java:619)
Caused by: java.sql.SQLException: Nome de objeto 'base_nvt' inválido.
        at net.sourceforge.jtds.jdbc.SQLDiagnostic.addDiagnostic(SQLDiagnostic.java:368)
        at net.sourceforge.jtds.jdbc.TdsCore.tdsErrorToken(TdsCore.java:2820)
        at net.sourceforge.jtds.jdbc.TdsCore.nextToken(TdsCore.java:2258)
        at net.sourceforge.jtds.jdbc.TdsCore.getMoreResults(TdsCore.java:632)
        at net.sourceforge.jtds.jdbc.JtdsStatement.executeSQLQuery(JtdsStatement.java:477)
        at net.sourceforge.jtds.jdbc.JtdsPreparedStatement.executeQuery(JtdsPreparedStatement.java:778)
        at net.sf.jasperreports.engine.query.JRJdbcQueryExecuter.createDatasource(JRJdbcQueryExecuter.java:135)
        ... 27 more
Erro no gera relatorio net.sf.jasperreports.engine.JRException: Error executing SQL statement for : RelatorioUsuario

A query do relatorio e essa:
obs:. Os parametros DATA1 e DATA2 sao do tipo timestamp.

SELECT * FROM base_bhz WHERE username = $P{USERNAME} and submitdate between $P{DATA1} and $P{DATA2}
UNION (SELECT * FROM base_bsb WHERE username = $P{USERNAME}  and submitdate between $P{DATA1} and $P{DATA2})
UNION (SELECT * FROM base_jac WHERE username = $P{USERNAME}  and submitdate between $P{DATA1} and $P{DATA2})
UNION (SELECT * FROM base_mea WHERE username = $P{USERNAME}  and submitdate between $P{DATA1} and $P{DATA2})
UNION (SELECT * FROM base_nvt WHERE username = $P{USERNAME}  and submitdate between $P{DATA1} and $P{DATA2})
UNION (SELECT * FROM base_rio WHERE username = $P{USERNAME}  and submitdate between $P{DATA1} and $P{DATA2})
UNION (SELECT * FROM base_sao WHERE username = $P{USERNAME}  and submitdate between $P{DATA1} and $P{DATA2})
UNION (SELECT * FROM base_tme WHERE username = $P{USERNAME}  and submitdate between $P{DATA1} and $P{DATA2})
UNION (SELECT * FROM base_vix WHERE username = $P{USERNAME}  and submitdate between $P{DATA1} and $P{DATA2})
ORDER BY ServerName

Quando pego essa query e executo no sql e coloco alguns parametros na mao, a consulta e feita perfeitamente, mas quando chamo pelo servlet da esse erro.
O que eu faço, e problema no servlet? nos parametros? Pois ja testei e debuguei mas o erro so da quando executa o relatorio. O que devo fazer, por favor me ajudem, preciso muito resolver isso. Desde já, obrigado.

D

Ai galera, consegui resolver meu problema, graças a Deus, rsrs. Depois de muito concertar e ouvindoo a ajuda de vcs, deu tudo certo. Valeu pessoal, valeu mesmo.

Criado 13 de janeiro de 2010
Ultima resposta 23 de jan. de 2010
Respostas 18
Participantes 5