Geração de gráficos em Java

2 respostas
E

Olá pessoal.
Estou com o seguinte problema. Estou tentando gerar um gráfico em Java utilizando o Cewolf com os resultados obtidos através de um select no banco de dados.
Acontece que tenho 2 arquivos Java, o primeiro é o Servlet que faz a consulta no banco, o segundo é a classe que gera o gráfico.
Alguém sabe me dizer como eu passo uma variável de um select no primeiro arquivo Java para o segundo que gera o gráfico?

Segue os códigos abaixo:

Código do Servlet

package gera_grafico;
 
import java.sql.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.text.*;
import java.io.*;
import java.util.*;
 
public class Consulta extends HttpServlet {
 
public void doPost ( HttpServletRequest request, HttpServletResponse response ) throws ServletException, IOException
{
String datainicial = request.getParameter ("DATA_INICIAL");
String datafinal = request.getParameter ("DATA_FINAL");
String nrpip = request.getParameter ("NRP_IP");
//}
 
 
//public static void main(String args[])
//{
 
// A captura de exceções SQLException em Java é obrigatória para usarmos JDBC.
// Para termos acesso ao objeto con, ele deve ter um escopo mais amplo que o bloco try
 
Connection connection = null;
ResultSet tabela = null;
Statement instrucao = null;
try
{
// Carregando o JDBC Driver
String driverName = "org.gjt.mm.mysql.Driver"; // MySQL MM JDBC driver
Class.forName(driverName);
 
// Criando a conexão com o Banco de Dados
String serverName = "x.x.x.x";
String mydatabase = "nrp";
String url = "jdbc:mysql://" + serverName + "/" + mydatabase; // a JDBC url
String username = "x";
String password = "x";
connection = DriverManager.getConnection(url, username, password);
instrucao = connection.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
 
String q="select * from erros_nrp where data >= '"+datainicial+"' and data <= '"+datafinal+"' and nrp_ip = '"+nrpip+"'";
 
tabela = instrucao.executeQuery(q);
 
response.setContentType( "text/html" );
PrintWriter responseOutput = response.getWriter();
StringBuffer buf = new StringBuffer();
buf.append("<HTML>");
buf.append("<CENTER>");
buf.append("<TABLE BORDER=10 CELLPADDING=5><TR>");
buf.append("<th bgcolor=Green>DATA</th><th bgcolor=White>NRP_IP</th><th bgcolor=Red>ERROS</th></TR>");
int conta_erros = 0;
while (tabela.next()) {
buf.append("<TR>");
buf.append("<TD>"+tabela.getString(1)+"</TD>");
buf.append("<TD>"+tabela.getString(2)+"</TD>");
buf.append("<TD>"+tabela.getString(3)+"</TD>");
conta_erros=conta_erros + tabela.getInt(3);
buf.append("</TR>"); }; //fim do while
buf.append("<TR>");
buf.append("<TD>TOTAL DE ERROS</TD>");
buf.append("<TD></TD>");
buf.append("<TD>"+conta_erros+"</TD>");
buf.append("</TR>");
buf.append("</TABLE>");
buf.append("<hr>");
buf.append("</CENTER></HTML>");
 
responseOutput.println( buf.toString() );
responseOutput.close();
 
} catch (ClassNotFoundException e)
{
//Driver não encontrado
System.out.println("O driver expecificado não foi encontrado.");
} catch (SQLException e)
{
//Não está conseguindo se conectar ao banco
System.out.println("Não foi possível conectar ao Banco de Dados");
}
}
}

Código que gera o gráfico. Observe, as variáveis (data por exemplo) estão com valores fixos, é aí que preciso colocar a variável da consulta sql que fiz.

package gera_grafico;
 
import java.util.Date;
import java.util.Map;
import java.io.Serializable;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.category.DefaultCategoryDataset;
import de.laures.cewolf.DatasetProduceException;
import de.laures.cewolf.DatasetProducer;
 
public class GraficoLinha implements DatasetProducer, Serializable {
  public final String[] data = {"28/12/2004","29/12/2004","30/12/2004","31/12/2004","01/01/2005"};
  public final String[] nrp = {"123.456.123.456","321.654.321.654"};
 
public Object produceDataset(Map params) throws DatasetProduceException {
  DefaultCategoryDataset dataset = new DefaultCategoryDataset();
  for (int a=0; a<nrp.length; a++){
    int valor= (int)(Math.random() * 1000 + 1000);
    for (int i=0; i<data.length; i++){
      final int y = valor + (int)(Math.random() * 200 - 100);
      valor = y;
      dataset.addValue((double)y, nrp[a], data[i]);
    }
  }
  return dataset;
}
 
public boolean hasExpired(Map params, Date since){
  return (System.currentTimeMillis() - since.getTime()) > 5000;
}
 
public String getProducerId(){
  return "PageViewCountData DatasetProducer";
}
}

2 Respostas

E

Bom para isso vc tem quer instanciar um objeto da sua classe de geração de gráfico dentro do servlet, na sua classe de geração do gráfico vc precisa ter um método public que receba as informações que vc quer enviar do servlet para dentro do objeto da classe que gera o gráfico
e depois é soh vc manipular os dados recebidos do servlet atraves desse método implementado na classe do gráfico :wink:

[]'s

E

E como eu faço isto?
Pode me dar algum exemplo?

Obrigado.
Everton

Criado 25 de maio de 2005
Ultima resposta 30 de mai. de 2005
Respostas 2
Participantes 2