Retorno zero em consulta, pq?

5 respostas
F
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.
/*
 * 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
    
    
    
}
O segundo programa que é utilizado na Jsp
/*
 * 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";
        }
}
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!

5 Respostas

M

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:

C

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!

F

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.

C

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

F
Bom fiz um outro programa com outro tipo de consulta, para gerar um grafico:
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();
        }
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.

Criado 9 de julho de 2006
Ultima resposta 12 de jul. de 2006
Respostas 5
Participantes 3