public rel_clientes() throws JRException{
try
{
HashMap parametros = new HashMap();// crio os parametros
CriaConexao.getConexao();
con.executeSQL("SELECT * from cliente;");
InputStream in = ClassLoader.getSystemClassLoader().getClass().getResourceAsStream(getReportFullPath());
JasperViewer jrv = new JasperViewer(in,false);// Crio o JasperViewer que recebe como parametro o JasperPrint
jrv.setVisible(true);// Mando exibir o relatório
}catch(SQLException erro){
JOptionPane.showMessageDialog(null, "Erro!" +erro);
erro.printStackTrace(System.err);
}
}
}
[/code]
Classe que conecta com o banco de dados
[code]public class CriaConexao {
private static Connection conexao;
public static Statement statement = null;
public static ResultSet resultset = null;
public static Connection getConexao() throws SQLException {
try {
Class.forName("com.mysql.jdbc.Driver");
System.out.println("Conectando ao Banco!");
return DriverManager.getConnection("jdbc:mysql://localhost/salao", "root", "admin");
} catch (ClassNotFoundException e) {
throw new SQLException(e.getMessage());
}
}
public void executeSQL(String sql) {
try {
if (conexao == null) {
this.getConexao();
}
java.sql.PreparedStatement ps = conexao.prepareStatement(sql);
resultset = ps.executeQuery();
} catch(SQLException sqlex) {
JOptionPane.showMessageDialog(null,"Não foi possível executar o comando sql, " + sqlex + ", o sql passado foi " + sql);
}
}
}[/code]
O erro que da é este
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at salao.bancodados.CriaConexao.executeSQL(CriaConexao.java:41)
at salao.relatorio.rel_clientes.<init>(rel_clientes.java:28)
at salao.forms.JFTelaPrincipal.jMRelatorioClientesActionPerformed(JFTelaPrincipal.java:189)
at salao.forms.JFTelaPrincipal.access$600(JFTelaPrincipal.java:23)
at salao.forms.JFTelaPrincipal$7.actionPerformed(JFTelaPrincipal.java:143)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
at javax.swing.AbstractButton.doClick(AbstractButton.java:357)
at javax.swing.plaf.basic.BasicMenuItemUI.doClick(BasicMenuItemUI.java:809)
at javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased(BasicMenuItemUI.java:850)
at java.awt.Component.processMouseEvent(Component.java:6267)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
at java.awt.Component.processEvent(Component.java:6032)
at java.awt.Container.processEvent(Container.java:2041)
at java.awt.Component.dispatchEventImpl(Component.java:4630)
at java.awt.Container.dispatchEventImpl(Container.java:2099)
at java.awt.Component.dispatchEvent(Component.java:4460)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4577)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
at java.awt.Container.dispatchEventImpl(Container.java:2085)
at java.awt.Window.dispatchEventImpl(Window.java:2478)
at java.awt.Component.dispatchEvent(Component.java:4460)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
CONSTRUÍDO COM SUCESSO (tempo total: 5 segundos)
Agradeço antecipadamente aos que puderem dar uma força
Que sejam iluminados pela Luz que veio ao mundo para nos salvar, Jesus
Bom… pelo que vi a maneira que você implementou, você não tem um “Connection Factory”, e sim uma classe que se auto-conecta e executa um SQL… o problema é esse método / você está retornando a conexão pra quem???
public static Connection getConexao() throws SQLException {
try {
Class.forName("com.mysql.jdbc.Driver");
System.out.println("Conectando ao Banco!");
return DriverManager.getConnection("jdbc:mysql://localhost/salao", "root", "admin");
} catch (ClassNotFoundException e) {
throw new SQLException(e.getMessage());
}
}
Tenta assim:
public static void getConexao() throws SQLException {
try {
Class.forName("com.mysql.jdbc.Driver");
System.out.println("Conectando ao Banco!");
this.conexao = DriverManager.getConnection("jdbc:mysql://localhost/salao", "root", "admin");
} catch (ClassNotFoundException e) {
throw new SQLException(e.getMessage());
}
}
Não sei em que tipo de projeto você está utilizando isso, mas sugiro seriamente caso vá usar muito o banco de dados mudar essa implementação…
Bom… tentei montar mais ou menos o código com a mudança… mas tem bastante coisa a mudar.
Basicamente é o seguinte, você tem uma classe com métodos estáticos realizando a conexão e executando a Query, porém em nenhum momento por exemplo o atributo “conexao” tem seu conteúdo alterado (você não estava retornando nada pra ele). O ResultSet da query não está sendo passado para o relatório (public void executeSQL).
Uma dica: a implementação da classe “CriaConexao” deveria apenas retornar uma conexão (ou abrir uma nova), e não executar querys…
public static Connection conectar()
{
try
{
Class.forName("com.mysql.jdbc.Driver");
Connection con = DriverManager.getConnection("jdbc:mysql://localhost/salao", "root", "admin");
return con;
}
catch(ClassNotFoundException c)
{
JOptionPane.showMessageDialog(null, "Classe "+servidor+" não encontrada \n"
+ "Erro :"+c.getMessage());
}
catch(SQLException sqlE){JOptionPane.showMessageDialog(null, "Erro SQL "+ sqlE.getMessage());
}
return null;
}
No seu relatorio
public class rel_clientes{
CriaConexao con = new CriaConexao(); //está é a minha conexão com o banco de dados MySQL
protected String getReportFullPath() {
return "relatorio/rel_clientes.jasper";
}
public rel_clientes() throws JRException{
try
{
HashMap parametros = new HashMap();// crio os parametros
java.sql.Connection con = Conexao.conectar();
con.executeSQL("SELECT * from cliente;");
InputStream in = ClassLoader.getSystemClassLoader().getClass().getResourceAsStream(getReportFullPath());
JasperViewer jrv = new JasperViewer(in,false);// Crio o JasperViewer que recebe como parametro o JasperPrint
jrv.setVisible(true);// Mando exibir o relatório
}catch(SQLException erro){
JOptionPane.showMessageDialog(null, "Erro!" +erro);
erro.printStackTrace(System.err);
}
}
}
Você fez seu relatorio com iReport né? eu custumo chamar assim …
public void geraRelatorio(){
java.sql.Connection con = Conexao.conectar();
HashMap p = new HashMap();
p.put("param1", param1);
File arquivo = new File("caminho/relatorio.jasper");
JasperPrint jp = JasperFillManager.fillReport(arquivo.getAbsolutePath(), p, con);
JasperExportManager.exportReportToPdfFile(jp,"relatorio.pdf");
}
[quote=GusMcCart]Bom… tentei montar mais ou menos o código com a mudança… mas tem bastante coisa a mudar.
Basicamente é o seguinte, você tem uma classe com métodos estáticos realizando a conexão e executando a Query, porém em nenhum momento por exemplo o atributo “conexao” tem seu conteúdo alterado (você não estava retornando nada pra ele). O ResultSet da query não está sendo passado para o relatório (public void executeSQL).
Uma dica: a implementação da classe “CriaConexao” deveria apenas retornar uma conexão (ou abrir uma nova), e não executar querys…[/quote]
Vai mandar o seu relatorio exportado como pdf na pasta raiz do seu projeto …
o nome “relatorio.pdf” seria o nome que ele seria exportado, creio eu que no seu caso seja “Relatorios de Clientes.pdf”
Ele está salvo corretamente na sua pasta raiz ou está em branco?
Vai mandar o seu relatorio exportado como pdf na pasta raiz do seu projeto …
o nome “relatorio.pdf” seria o nome que ele seria exportado, creio eu que no seu caso seja “Relatorios de Clientes.pdf”
Ele está salvo corretamente na sua pasta raiz ou está em branco?[/quote]
Quando você compila no iReport da certo né?
Coloca o seu código ai pra eu dar uma olhada por favor …
O Query do iReport e o que você está usando para chamar o relatório.
Quando você executa a conexão em outro lugar ela funciona certinho tbm?
[quote=cembjr]Quando você compila no iReport da certo né?
Coloca o seu código ai pra eu dar uma olhada por favor …
O Query do iReport e o que você está usando para chamar o relatório.
Quando você executa a conexão em outro lugar ela funciona certinho tbm?[/quote]
Sim cembjr, quando compilo no iReport da certo, tanto é que o arquivo .jasper e .jsxml são gerados
o código é este:
[code]public class rel_clientes{
private Object param1;
private static class Conexao {
private static Connection getConexao;
public Conexao() {
}
}
CriaConexao con = new CriaConexao();
public void geraRelatorio(){
try{
java.sql.Connection conn = Conexao.getConexao;
HashMap p = new HashMap(); //p.put(“param1”, param1);
File arquivo = new File(“D:/salao/salao/relatorios/rel_clientes.jasper”);
view plaincopy to clipboardprint?
public class rel_clientes{
private Object param1;
private static class Conexao {
private static Connection getConexao;
public Conexao() {
}
}
CriaConexao con = new CriaConexao();
public void geraRelatorio(){
try{
java.sql.Connection conn = Conexao.getConexao;
HashMap p = new HashMap();
//p.put("param1", param1);
File arquivo = new File("rel/rel_clientes.jasper");
if(arquivo.exists())
{
JOptionPane.showMessageDialog(null, "Arquivo .jasper Encontrado");
if(conn != null){
JasperPrint jp = JasperFillManager.fillReport(arquivo.getAbsolutePath(), p, conn);
JasperExportManager.exportReportToPdfFile(jp, "rel_clientes.pdf");
JOptionPane.showMessageDialog(null, "Exportado");
} else JOptionPane.showMessageDialog(null, "Conexao Nula");
} else JOptionPane.showMessageDialog(null, "Arquivo Inexistente");
}
catch(Exception ex)
{ JOptionPane.showMessageDialog(null, "Erro .: "+ex.getMessage());}
}
}
Assim vce vai verificar se o caminha do arquivo e a conexao estão ok!
Então, no seu projeto cria uma pasta rel e coloca o seu relatorio nela! Na raiz mesmo!
Tenta assim pra ver se funciona!
view plaincopy to clipboardprint?
public class rel_clientes{
private Object param1;
private static class Conexao {
private static Connection getConexao;
public Conexao() {
}
}
CriaConexao con = new CriaConexao();
public void geraRelatorio(){
try{
java.sql.Connection conn = Conexao.getConexao;
HashMap p = new HashMap();
//p.put("param1", param1);
File arquivo = new File("rel/rel_clientes.jasper");
if(arquivo.exists())
{
JOptionPane.showMessageDialog(null, "Arquivo .jasper Encontrado");
if(conn != null){
JasperPrint jp = JasperFillManager.fillReport(arquivo.getAbsolutePath(), p, conn);
JasperExportManager.exportReportToPdfFile(jp, "rel_clientes.pdf");
JOptionPane.showMessageDialog(null, "Exportado");
} else JOptionPane.showMessageDialog(null, "Conexao Nula");
} else JOptionPane.showMessageDialog(null, "Arquivo Inexistente");
}
catch(Exception ex)
{ JOptionPane.showMessageDialog(null, "Erro .: "+ex.getMessage());}
}
}
Assim vce vai verificar se o caminha do arquivo e a conexao estão ok!
Então, no seu projeto cria uma pasta rel e coloca o seu relatorio nela! Na raiz mesmo!
Tenta assim pra ver se funciona!
Qual é o seu SO?[/quote]
Ei cembjr, realmente as condicionais que vc colocou achou o lugar do erro,
mas eu não sei como resolver
o sistema parou nos dois IFs
arquivo não encontrado - e olha que coloquei o endereço inteiro e nada
view plaincopy to clipboardprint?
public class rel_clientes{
private Object param1;
private static class Conexao {
private static Connection getConexao;
public Conexao() {
}
}
CriaConexao con = new CriaConexao();
public void geraRelatorio(){
try{
java.sql.Connection conn = Conexao.getConexao;
HashMap p = new HashMap();
//p.put("param1", param1);
File arquivo = new File("rel/rel_clientes.jasper");
if(arquivo.exists())
{
JOptionPane.showMessageDialog(null, "Arquivo .jasper Encontrado");
if(conn != null){
JasperPrint jp = JasperFillManager.fillReport(arquivo.getAbsolutePath(), p, conn);
JasperExportManager.exportReportToPdfFile(jp, "rel_clientes.pdf");
JOptionPane.showMessageDialog(null, "Exportado");
} else JOptionPane.showMessageDialog(null, "Conexao Nula");
} else JOptionPane.showMessageDialog(null, "Arquivo Inexistente");
}
catch(Exception ex)
{ JOptionPane.showMessageDialog(null, "Erro .: "+ex.getMessage());}
}
}
Assim vce vai verificar se o caminha do arquivo e a conexao estão ok!
Então, no seu projeto cria uma pasta rel e coloca o seu relatorio nela! Na raiz mesmo!
Tenta assim pra ver se funciona!
Qual é o seu SO?[/quote]
Ei cembjr, realmente as condicionais que vc colocou achou o lugar do erro,
mas eu não sei como resolver
o sistema parou nos dois IFs
arquivo não encontrado - e olha que coloquei o endereço inteiro e nada