Como passar o IP do Banco para o Jasper no código Java? (iReport) [RESOLVIDO]

Boa Tarde Pessoal.

Pessoal, estou com uma dúvida.

Eu gostaria de chamar um relatório .jasper em uma aplicação Java, porém eu gostaria de passar o IP, Porta e o nome do Banco de dados para ele dentro do meu código.

Por exemplo: as variaveis:

String IP = "127.0.0.1";
String Porta = "3307";
String Database = "BancoTeste";

Eu sei que dentro do iReport eu posso clicar nesse botão e configurar.

Porém eu gostaria de passar esses dados como parametro no código Java e depois imprimir. Pois se depois o servidor for alterado, eu teria que compilar todos relatórios novamente.

Se alguém puder ajudar, agradeço muito.

Obrigadão Pessoal.

Abraços.

Podes passar por parâmetro… mas não entendo a utilidade disso.
O que queres fazer?

Isso, pode ser.

Tem como passar um exemplo por favor?

Pelo seguinte: Na aplicação web tem 200 relatórios Jasper. Ai se trocar o servidor do banco, terei que compilar novamente os 200 relatórios informando o novo IP do banco.

E se for no código Java, eu posso fazer esse código ler um arquivo, e armazenar nas variaveis: IP, Porta e Database. E em seguida passar como parametro para o Jasper.

Então se trocarem o servidor, basta trocar o IP no arquivo, e o código se encarrega de ler esse arquivo, e passa a variavel para o Jasper.

Eu chamo o jasper com o seguinte código:


String relatorio = null;

relatorio = "relatorio.jasper";

File reportFile = new File(application.getRealPath(relatorio));

Map parameters = new HashMap();


byte[] bytes = JasperRunManager.runReportToPdf(reportFile.getPath (), parameters, Conect.getConexaoTeste());

response.setContentType("application/pdf");
response.setContentLength(bytes.length);

ServletOutputStream ouputStream = response.getOutputStream();
ouputStream.write(bytes, 0, bytes.length);

ouputStream.flush();
ouputStream.close();

Conect.fechaConexao();

Tem algum exemplo de como eu passária o IP para o Jasper?

Muito Obrigado pela ajuda.

Você pode passar quaisquer parâmetros a um relatório através de um Map. Se quiser passar também a conexão SQL que o relatório deve usar (ou qualquer outra fonte de dados personalizada), há métodos específicos para isso.
http://jasperreports.sourceforge.net/api/net/sf/jasperreports/engine/JasperFillManager.html#fillReport(net.sf.jasperreports.engine.JasperReport, java.util.Map, java.sql.Connection)
http://jasperreports.sourceforge.net/api/net/sf/jasperreports/engine/JasperFillManager.html#fillReport(net.sf.jasperreports.engine.JasperReport, java.util.Map, net.sf.jasperreports.engine.JRDataSource)

Tentei de diversas maneiras mas não consegui.

Alguém tem algum exemplo para compartilhar?

Obrigadão.

Pessoal, muito obrigado. Funcionou corretamente.

Obrigado à todos e ao Roger que me deu um exemplo bom. Se me permitir compartilhar:

JasperReport report = (JasperReport) JRLoader.loadObject(/* arquivo de relatório aqui */);       
Connection conn = DriverManager.getConnection(/* parâmetros de conexão ao banco aqui */);       
Map params = new HashMap();       
/* ... Preencher parâmetros ... */       
JasperPrint print = JasperFillManager.fillReport(report, params, conn);  

Um outro exemplo que peguei do Flaviosv foi:

JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, /*este valor setará REPORT_CONNECTION -->*/dataSource.getConnection()); 

Então no meu caso que é para web, a linha de código ficou assim:

byte[] bytes = JasperRunManager.runReportToPdf(reportFile.getPath (), parameters, Conect.getConexao());

Onde Conect.getConexao() são os dados que será passado para o relatório. E se precisar alterar, basta atualizar na classe de conexão.

Muito Obrigado à todos.

Abraços.

Show de bola :slight_smile: Fica a sugestão de incluir a tag “[RESOLVIDO]” no título do tópico para orientar quem fizer buscas sobre o tema.

Opa, é verdade. Havia esquecido. hehe

Obrigado novamente.

Abraços.