Retorno zero em consulta, pq?

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!

Opa,

Primeiro organize melhor estas consultas suas, não precisa de executar isto tudo aí não, com alguns ors uma consulta só chega… quanto ao valor zero fica difícil lhe falar, mas já tentou usar o debug?

:okok:

A organização do código é um fator fundamental pra tu dar manutencao no seu sistema kra, entao comece por isso, depois tu vai ver como vai ser bem + facil tu conseguir achar os erros!

Marcos oque significa “ors”, tipo que ele não ta realizando nada dentro do TRY (ou seja não realiza a consulta ao BD), e não sei o porque disso! Simplesmente quendo mando plotar o gráfico fica a figura montada sem gráfico, ja que ele considera que os resultados são os valores iniciais dos doubles, onde valem ZERO.

*ps: realmente tenho que organizar muito melhor os códigos.

codigo organizado e identado + debug = achar facilmente o erro! :razz:

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: ratinho não consigo Debug em um so arquivo, o NetBeans me informa que o servlet não está mapeado no web.xml. So consigo Debug no projeto todo.