Criei um relatorio no ireport, mas não sei como especificar o caminho
public void gerarRelatorioAlunos(String layout) throws JRException, ClassNotFoundException, SQLException {
JasperDesign desenho = JRXmlLoader.load( layout );
JasperReport relatorio = JasperCompileManager.compileReport( desenho );
Connection con=conexao.pegarConexao();
Statement stm = con.createStatement();
String query = "select * from aluno";
ResultSet rs = stm.executeQuery( query );
JRResultSetDataSource jrRS = new JRResultSetDataSource( rs );
Map parametros = new HashMap();
JasperPrint impressao = JasperFillManager.fillReport( relatorio , parametros, jrRS );
JasperViewer viewer = new JasperViewer( impressao , true );
viewer.show();
}
este metodo gera o relatorio
este é para exibir
public static void main(String[] args) {
try {
new GerarRelatorios().gerarRelatorioAlunos("RelatorioAlunos.jasper");
} catch (JRException ex) {
ex.printStackTrace();
} catch (ClassNotFoundException ex) {
ex.printStackTrace();
} catch (SQLException ex) {
ex.printStackTrace();
}
}
Alguem poderia me ajudar?
Os arquivos .jasper estão na asta raiz de seu projeto?
Senão estverem, tente colocar…
Fico no aguardo…
desktop, feito no netbeans
Tenta:
new GerarRelatorios().gerarRelatorioAlunos("…/RelatorioAlunos.jasper");
ou
new GerarRelatorios().gerarRelatorioAlunos(“src/RelatorioAlunos.jasper”);
aparece este erro
net.sf.jasperreports.engine.JRException: java.io.FileNotFoundException: src\RelatorioAlunos.jasper (O sistema não pode encontrar o arquivo especificado)
at net.sf.jasperreports.engine.xml.JRXmlLoader.load(JRXmlLoader.java:172)
at net.sf.jasperreports.engine.xml.JRXmlLoader.load(JRXmlLoader.java:152)
at autoescola.modelo.GerarRelatorios.gerarRelatorioAlunos(GerarRelatorios.java:56)
at autoescola.modelo.GerarRelatorios.main(GerarRelatorios.java:93)
Caused by: java.io.FileNotFoundException: src\RelatorioAlunos.jasper (O sistema não pode encontrar o arquivo especificado)
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.<init>(FileInputStream.java:106)
at net.sf.jasperreports.engine.xml.JRXmlLoader.load(JRXmlLoader.java:167)
... 3 more
[color=darkblue]Sei que o seu projeto é Desktop, mas é melhor por enquanto você nem colocar na src, coloca realmente na raiz do projeto, exemplo seu projeto ProjectIReport, coloca nessa pasta e roda como \jasper.jrxml, dai acredito que funcione, de qualquer forma tem esse tópico para ajudar : [/color]
[RESOLVIDO] Jasper erro java.io.FileNotFoundException ?
Não adiantou, continua o mesmo erro
o caminho de seu relatorio depende da forma com que voce ira capturar os inputStream pra gera-lo.
Imagine que a classe que gera o relatorio esta na mesma pasta do seu arquivo .jrxml,pra encontra-lo,poderia captura o arquivo e gerar o InputStream,:
String path = "Relatorio.jrxml";
inputStream input = this.getResourceAsStream(path);
JasperDesign desenho = JRXmlLoader.load(input, map,ClasseJRDataSource );
Quando chegar em casa procuro um exemplo melhor e posto aqui…
Att…
Se o arquivo .jasper estiver juntamente com a classe no mesmo pacote use como indicado acime.
this.getClass().getResourceAsStream("path");
caso esteja no src do seu projeto utilize assim:
this.getClass().getClassLoader().getResourceAsStream("path");
Ronaldo.
meu codigo ta assim
public JasperPrint gerarRelatorioAlunos() throws Exception{
JasperPrint rel=null;
try{
Connection con=conexao.pegarConexao();
HashMap map= new HashMap();
String path = "RelatorioAlunos.jasper";
InputStream input = this.getClass().getClassLoader().getResourceAsStream(path);
rel=JasperFillManager.fillReport(input,map,con);
}catch (JRException e){
e.printStackTrace();
}
return rel;
}
public static void main(String[] args) {
try {
new GerarRelatorios().gerarRelatorioAlunos();
} catch (Exception ex) {
ex.printStackTrace();
}
}
mas não aparece o relatorio, e não mostra o erro, e o meu arquivo.jasper esta na pasta src
Você possue o jasperprint mas precisa do JasperViewer para visualizar.
tenta assim
public JasperPrint gerarRelatorioAlunos() throws Exception{
JasperPrint rel=null;
try{
Connection con=conexao.pegarConexao();
HashMap map= new HashMap();
String path = "RelatorioAlunos.jasper";
InputStream input = this.getClass().getClassLoader().getResourceAsStream(path);
rel=JasperFillManager.fillReport(input,map,con);
JasperViewer.viewReport(rel,false);
}catch (JRException e){
e.printStackTrace();
}
return rel;
}
public static void main(String[] args) {
try {
new GerarRelatorios().gerarRelatorioAlunos();
} catch (Exception ex) {
ex.printStackTrace();
}
}
Se precisar exportar o relatório direto para algum arquivo em PDF XLS ou algum outro formato olhe a classe JasperExportManager.exportReportToxxxxFie().
Ronaldo
Obrigada, apareceu, :lol:
Mais uma perguntinha, eu posso usar esse método para que o usuario insira as informações no relatorio?
O que teria de mudar?
abraços!
Explique esta parte " Que o usuário insira as informações no relatório" seriam alguma personalização?
Se for algum dado em expec´ifico para cada usuário vc pode soliticar esta informação antes de gerar o relatório, e passar como parâmetro no map.
Explique melhor oq precisa para que possamos ajudar.
Ronaldo
É um relatorio de alunos, e quero que o usuario,
possa inserir os dados do aluno, como o nome, por exemplo.
Ok,
Mas estes dados não vem da sua base de dados?
Não, não será possível inserir dados sem gerar o relatorio novamente, tendo em vista que o datasource é carregado antes do preenchimento do relatório.
Sugiro então vc exportar este relatório para xls e assim o usuário preencher os dados restantes.
Ronaldo.
Ta gerando o relatorio normalmente, mas não mostra os alunos cadastrados, vc sabe porque?
Você configurou uma query que retorna dados na criação do seu .jasper?
Execute esta query diretamente em banco, pois os dados do relatório é preenchido com o datasource.
Ronaldo
Fiz dessa forma mas não ta dando certo
public JasperPrint gerarRelatorioAlunosExibir() throws Exception{
JasperPrint rel=null;
try{
Connection con=conexao.pegarConexao();
Statement stm = con.createStatement();
String path = "RelatorioAlunos.jasper";
String query = "select * from aluno";
ResultSet rs = stm.executeQuery( query );
JRResultSetDataSource jrRS = new JRResultSetDataSource( rs );
HashMap map= new HashMap();
InputStream input = this.getClass().getClassLoader().getResourceAsStream(path);
rel=JasperFillManager.fillReport(input,map,jrRS);
JasperViewer.viewReport(rel,false);
}catch (JRException e){
e.printStackTrace();
}
return rel;
net.sf.jasperreports.engine.JRException: Unknown column name : aluno_codigo
at net.sf.jasperreports.engine.JRResultSetDataSource.getColumnIndex(JRResultSetDataSource.java:359)
at net.sf.jasperreports.engine.JRResultSetDataSource.getFieldValue(JRResultSetDataSource.java:116)
at net.sf.jasperreports.engine.fill.JRFillDataset.setOldValues(JRFillDataset.java:787)
at net.sf.jasperreports.engine.fill.JRFillDataset.next(JRFillDataset.java:751)
at net.sf.jasperreports.engine.fill.JRBaseFiller.next(JRBaseFiller.java:1422)
at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReport(JRVerticalFiller.java:111)
at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:879)
at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:801)
at net.sf.jasperreports.engine.fill.JRFiller.fillReport(JRFiller.java:89)
at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:601)
at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:582)
at autoescola.modelo.GerarRelatorios.gerarRelatorioAlunosExibir(GerarRelatorios.java:127)
at autoescola.modelo.GerarRelatorios.main(GerarRelatorios.java:98)