Erro consulta em Mysql

6 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!

6 Respostas

Roger75

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.

F

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?

T

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

F

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?

T

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

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: Takeshi, coloquei no outro código "e.printStackTrace()" e não me retorno nenhum erro de consulta do MySQL não.
Criado 9 de julho de 2006
Ultima resposta 12 de jul. de 2006
Respostas 6
Participantes 3