Gente estou começando a desenvolver relatórios aqui!
e tipo quando eu comecei com Banco de Dados tive o mesmo problema para conecta-ló ao sistema, tipo nos relatórios eu também devo baixar algum driver para funcionar a conexão dos relatórios ou eu instancio um relatório em uma classe tipo, como é feita essa conexão?
vlw!
Sua aplicação é desktop ou client/server ?
vc pode usar o irepot/jasper e passar para ele o resultset, de forma que o ireport não precisará acessar o banco de dados diretamente.
Ou você pode configurá-lo para acessar o banco de dados. Então neste caso, passará um SQL para ele, alem de configurar o driver e colocar o jar do driver no classpath do relatorio.
Configurando ele para acessar diretamente o banco de dados, você perde a opção de ter um pool de conexões, o que otimizaria seu software. E ainda tornará o aplicativo mais dificil de dar manutenção, pois vai espalhar a configuração do seu banco em vários reports.
Se estiver desenvolvendo em client/server, eu adotaria o BIRT ao invés do IReport … pq eh muito muito muito mais fácil de fazer relatórios. Neste caso o birt poderia ser instalado como uma outra aplicação web e os relatórios apontariam para o JNDI do recurso Datasource do servidor de aplicações. E sua aplicação web acessaria a url do seu relatório BIRT
Não sei se o BIRT funciona em applicação desktop apenas …
O mais dificil do BIRT é fazer o SQL o resto é fácil…
A aplicação é desktop, mas naum to achando o driver para download e o q o netBeans tem é a versão 3.0 e a atual é 3.7 :shock:
Sabe onde consigo baixar o .jar?
Esse problema foi resolvido!!! Õ/
O problema agora é:
Como chamar os meu relatórios a partir da aplicação, devo criar eles e puxar quando executar o evento ou cria-los no momento do evento?
podem me exclarecer isso?
vlw galera!
Gente vi uns exemplos aqui na net onde o pessoal usa mto, alias sempre HashMap para criação de relatórios.
Duvida o uso de HashMap eh bastante e um pouco avançado ou soh o basico?
vlw!
guisantogui,
Depende a usabilidade do relatório. Utilizo apenas pra passar parametros de localização de arquivos.
[quote=malhuco]guisantogui,
Depende a usabilidade do relatório. Utilizo apenas pra passar parametros de localização de arquivos.[/quote]
Tipo aqui vou ultilizar para retornar saldos como liquido do mes, do ano! Ou receitas divididas em TOTAL, mensal, semanal, mais ou menos assim, pode me explicar melhor?
peguei carona em outro topico mas ta gerando o seguinte erro no meu codigo:
[ERRO]
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory
at net.sf.jasperreports.engine.util.JRLoader.<clinit>(JRLoader.java:60)
at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:536)
at Testes.ChamaRel.geraRel(ChamaRel.java:23)
at Classes.Main.main(Main.java:24)
Caused by: java.lang.ClassNotFoundException: org.apache.commons.logging.LogFactory
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
... 4 more
[CODIGO]
import Classes.DAO.DAOPai;
import java.sql.SQLException;
import java.util.HashMap;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JRResultSetDataSource;
import net.sf.jasperreports.engine.JasperExportManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.view.JasperViewer;
public class ChamaRel extends DAOPai {
public ChamaRel(){
super();
}
public void geraRel() throws SQLException, JRException{
super.rs = super.stm.executeQuery("SELECT * FROM fn_class_grupo");
JRResultSetDataSource jrs = new JRResultSetDataSource(rs);
HashMap map = new HashMap();
JasperPrint imprimeRel = JasperFillManager.fillReport("Relatorio.jasper", map, jrs);
JasperExportManager.exportReportToPdfFile(imprimeRel, "Arquivo");
JasperViewer view = new JasperViewer(imprimeRel, true);
view.setVisible(true);
}
}
/*----------
Classe DAOPAI:
------------*/
package Classes.DAO;
import BancoDeDados.GerenciaConexaoBancoComDados;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.ResultSet;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.logging.Level;
import java.util.logging.Logger;
public class DAOPai {
protected StringBuilder constroiSql = null;
protected SimpleDateFormat sdf = null;
protected DateFormat formatador;
protected ResultSet rs = null;
protected Statement stm = null;
protected GerenciaConexaoBancoComDados gcbd = null;
public DAOPai(){
gcbd = new GerenciaConexaoBancoComDados();
constroiSql = new StringBuilder();
sdf = new SimpleDateFormat("ddMMyyy");
this.formatador = this.sdf;
try {
this.stm = gcbd.getBanco().getConexao().createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);
}
catch (SQLException ex) {
Logger.getLogger(DAOPai.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
ta faltando lib no teu projeto.
essa ai é exception do Log4j.
verifica se não esta faltando mais.
Como assim, eu importei o .JAR, eh isso q vc disse q tava faltando se não for, foi mal pela noobice!
vlw!
procure entender a exception:
- java.lang.NoClassDefFoundError: significa que a VM não encontrou um classe.
- org/apache/commons/logging/LogFactory: é a classe que está faltando.