Erro consulta em Mysql

Bom tenho um aplicativo que usa um bean, e uma jsp com tags do cewolf, pra gerar uns graficos. Contudo, a minha consulta ao MySQL sempre ta retornando um valor Zero.

[code]/*

  • ConexaoMysql.java
  • Created on 21 de Junho de 2006, 13:46
  • To change this template, choose Tools | Template Manager
  • and open the template in the editor.
    */

/**
*

  • @author Fernando
    */
    package br.feps.silva.banco;

import java.sql.*;

import java.io.IOException;
import java.io.InputStream;

import java.util.Properties;

//import org.apache.log4j.Logger;

public class ConexaoMySQL {

private static Connection conn;
private static Statement stm;
private static PreparedStatement pstm;
static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
static final String DATABASE_URL = "jdbc:mysql://localhost/cmuf";

/** Creates a new instance of ConexaoMysql */
public static void Conectar() {
    
    try
    {
        Class.forName(JDBC_DRIVER).newInstance();
        conn = DriverManager.getConnection(DATABASE_URL,"USER","SENHA");
        stm = conn.createStatement();
        //pstm = conn.createPreparedStatement();
    }//fim do try
    catch (SQLException sqlException )
{
    sqlException.printStackTrace();
}//fim do catch
    catch (InstantiationException e) {
		System.out.println("Não foi possivel instânciar o driver MySQL "
				+ e.toString());
	} 
    catch (IllegalAccessException e) {
		System.out.println("Não foi possivel instânciar o driver MySQL "
				+ e.toString());
	} 
    catch (ClassNotFoundException e) {
		System.out.println("Não foi possivel encontrar o driver MySQL "
				+ e.toString());
	}
    
}//fim do metodo conectar
public static Connection getConn() {
if (conn == null) {
        Conectar();
    }//fim do if
    return conn;
}//fim do metodo Connection

public static Statement getStm() {
if (conn == null) {
        Conectar();
}

try {
        stm = conn.createStatement();
} 
    catch (SQLException e) {
	e.printStackTrace();
	System.out.println("Não foi possivel criar um Statement "
	+ e.toString());
	}//fim do catch
return stm;
}//fim do getStm

public static void fechaConexao() {
try {
        conn.close();
        } 
    catch (SQLException e) {
        e.printStackTrace();
        System.out.println("Não foi possivel fechar a conexão "
        + e.getMessage());
    }//fim do catch
}//fim do metodo fechaConexao

}
[/code]
O segundo programa que é utilizado na Jsp

[code]/*

  • CargaDiario.java
  • Created on 9 de Julho de 2006, 18:41
  • To change this template, choose Tools | Template Manager
  • and open the template in the editor.
    */

/**
*

  • @author Fernando
    */
    package br.feps.silva.dataset;

import java.sql.*;
import java.util.Date;
import java.util.Map;

import org.jfree.data.general.DefaultPieDataset;
import br.feps.silva.banco.ConexaoMySQL;

import de.laures.cewolf.DatasetProduceException;
import de.laures.cewolf.DatasetProducer;

public class CargaDiario implements DatasetProducer {

public Object produceDataset(Map arg0) throws DatasetProduceException {
    DefaultPieDataset ds = new DefaultPieDataset();
        
        PreparedStatement pstm = null;
        
        String refFaseA = "0";
        String refFaseB = "0";
        String refFaseC = "0";
        String NomeCarga = "Elevadores"; //tem que vir de uma jsp [request.getparameter("NomeCarga");]
        String Local = "cemig"; // tem que vir de uma jsp
        String data = "2002-01-02"; // tem que vir de uma jsp
        double ValorFaseA = 0;
        double ValorFaseB = 0;
        double ValorFaseC = 0;
        //Aqui vem as legendas dos graficos
        String L1 = "Carga Fase A";
        String L2 = "Carga Fase B";
        String L3 = "Carga Fase C";
        String titulo = "Acumulo de carga em " +data+ " em "+NomeCarga+" da "+ Local;
        //String query1 = "";
        try{
            Connection conexao = ConexaoMySQL.getConn();
            
            PreparedStatement VfaseA = conexao.prepareStatement("SELECT autocod FROM carga WHERE fase = 'A' AND nome = ?");
            PreparedStatement VfaseB = conexao.prepareStatement("SELECT autocod FROM carga WHERE fase = 'B' AND nome = ?");
            PreparedStatement VfaseC = conexao.prepareStatement("SELECT autocod FROM carga WHERE fase = 'C' AND nome = ?");
            
            VfaseA.setString(1, NomeCarga);
            VfaseB.setString(1, NomeCarga);
            VfaseC.setString(1, NomeCarga);
            VfaseA.executeQuery();
            VfaseB.executeQuery();
            VfaseC.executeQuery();
            //Captura os valores da consulta para um ResultSet
            ResultSet rs = VfaseA.executeQuery();
            ResultSet rs2 = VfaseB.executeQuery();
            ResultSet rs3 = VfaseC.executeQuery();
            while(rs.next()){
                refFaseA += rs.getDouble("autocod");
            }
            while(rs2.next()){
                refFaseB += rs2.getDouble("autocod");
            }
            while(rs3.next()){
                refFaseC += rs3.getDouble("autocod");
            }
            //System.out.printf("O valor de referência da carga na fase A é:%s\n", refFaseA);
            //System.out.printf("O valor de referência da carga na fase B é:%s\n", refFaseB);
            //System.out.printf("O valor de referência da carga na fase C é:%s\n", refFaseC);
            //Até este ponto o programa capturou o numero da String carga no BD para realizar as consultas no BD com valor
            PreparedStatement QfaseA = conexao.prepareStatement("SELECT valor FROM cemig WHERE carga = ? AND data = ?");
            PreparedStatement QfaseB = conexao.prepareStatement("SELECT valor FROM cemig WHERE carga = ? AND data = ?");
            PreparedStatement QfaseC = conexao.prepareStatement("SELECT valor FROM cemig WHERE carga = ? AND data = ?");
            //Enviando as Strings carga com os novos valores obtidos da consulta anterior
            //QfaseA.setString(1, local);
            //QfaseB.setString(1, local);
            //QfaseC.setString(1, local);
            QfaseA.setString(1, refFaseA);
            QfaseB.setString(1, refFaseB);
            QfaseC.setString(1, refFaseC);
            QfaseA.setString(2, data);
            QfaseB.setString(2, data);
            QfaseC.setString(2, data);
            QfaseA.executeQuery();
            QfaseB.executeQuery();
            QfaseC.executeQuery();
            //armazena valores
            ResultSet rs4 = QfaseA.executeQuery();
            ResultSet rs5 = QfaseB.executeQuery();
            ResultSet rs6 = QfaseC.executeQuery();
            while(rs4.next()){
                ValorFaseA += rs4.getDouble("valor");
                //ds.setValue(ValorFaseA);
                
            }
            while(rs5.next()){
                ValorFaseB += rs5.getDouble("valor");
                
            }
            while(rs6.next()){
                ValorFaseC += rs6.getDouble("valor");
                
            }
            //System.out.printf("O valor total da carga %s(%s) na Fase A é:%s\n", refFaseA, NomeCarga, ValorFaseA);
            //System.out.printf("O valor total da carga %s(%s) na Fase B é:%s\n", refFaseB, NomeCarga, ValorFaseB);
            //System.out.printf("O valor total da carga %s(%s) na Fase C é:%s\n", refFaseC, NomeCarga, ValorFaseC);
            ds.setValue(L1, ValorFaseA);
            ds.setValue(L2, ValorFaseB);
            ds.setValue(L3, ValorFaseC);
        }
        catch (SQLException e) {
		
	}
        return ds;
    }//fim do objeto
    
    public boolean hasExpired(Map arg0, Date arg1) {
        return true;//para expirar em 5 segundos [return (System.currentTimeMillis() - since.getTime())  > 5000;]
    }//fim do boolean
    public String getProducerId() {
	return "CargaDiario";
    }

}[/code]
Engraçado que em um outro aplicativo que criei(não web, possui um main proprio) que tem o TRY exatamente igual ao do arquivo a cima, consigo os valores corretos e gerar o grafico. So no apliacativo web que esta dando esse erro, retornando os valores pra consulta como ZERO. Algum saberia porque? Obrigado!

Faz um teste: coloca um System.out.println dos valores da consulta e veja se eles aparecem no console ou no log. Se aparerecem é porque o erro é na sua JSP que não está conseguindo mostrar os valores.

Roger, eu tenho uma outra aplicação com os mesmos comandos que essa que utilizei System.out… e mostrou os resultados certos. So que essa aplicação eu rodo ela direto do NetBeans, e essa web que esta com problemas to rodando do Tomcat. Será que pode ser erro no meu mysql-connector?

o erro mais comum eh nao colocar o JAR do connector na pasta lib da aplicacao ou do tomcat

Rodei a aplicação direto do NetBeans(o qual tenho certeza que o jdbc ta funcionando), e o resultado foi o mesmo na JSP. Ela consegue usar o Bean so que parece que não utiliza o TRY do CargaDiario, retorna o valor inicial do doubel ZERO, qual seria o motivo do bean não estar reaçizando a consulta no BD, nesse meu código?

a primeira coisa a fazer eh nao silenciar a exception:

try { 
  ....
} catch (SQLException e) {
  e.printStackTrace();
}

poste aqui o que saiu se vc nao conseguir descobrir sozinho

Bom fiz um outro programa com outro tipo de consulta, para gerar um grafico:

[code]String Query = “SELECT carga,valor, COUNT(*) FROM cemig”
+ " where data = ‘2006-01-21’"
+ “GROUP BY carga, valor”;
try{
Connection conexao = ConexaoMySQL.getConn();

        ps = conexao.prepareStatement(Query);
        ResultSet rs = ps.executeQuery();
        while (rs.next()) {
// Inserindo no DataSet o estado e a quantidade de pessoas certificadas
   ds.setValue(rs.getString(1), new Double(rs.getInt(2)));
		}
    }//fim do try
    catch(SQLException e){
        e.printStackTrace();
    }[/code]

E dessa vez o resultado foi positivo, então fica claro que o erro era no código da minha consulta ao MySQL. Alguém poderia me informar qual é o erro dentro do TRY?
*ps: Takeshi, coloquei no outro código “e.printStackTrace()” e não me retorno nenhum erro de consulta do MySQL não.