Erro ao inserir dados do JAVA para um banco do Access

5 respostas
J

Olá pessoal. Estou tendo um problema quando quero inserir um registro no banco Access de uma aplicação JAVA. Consigo preencher comboBox com dados vindos do banco e na msm pagina quando tento inserir me dah um erro que segue abaixo:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
        at cadastros.equipamento.cadastrar(equipamento.java:67)
        at formularios.cadastrarHardware.buttonCadastrarActionPerformed(cadastrarHardware.java:370)
        at formularios.cadastrarHardware.access$300(cadastrarHardware.java:23)
        at formularios.cadastrarHardware$4.actionPerformed(cadastrarHardware.java:161)
        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.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
        at java.awt.Component.processMouseEvent(Component.java:6041)
        at javax.swing.JComponent.processMouseEvent(JComponent.java:3265)
        at java.awt.Component.processEvent(Component.java:5806)
        at java.awt.Container.processEvent(Container.java:2058)
        at java.awt.Component.dispatchEventImpl(Component.java:4413)
        at java.awt.Container.dispatchEventImpl(Container.java:2116)
        at java.awt.Component.dispatchEvent(Component.java:4243)
        at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4322)
        at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3986)
        at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3916)
        at java.awt.Container.dispatchEventImpl(Container.java:2102)
        at java.awt.Window.dispatchEventImpl(Window.java:2440)
        at java.awt.Component.dispatchEvent(Component.java:4243)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273)
        at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160)
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:121)

segue abaixo o codigo da classe q tem o metodo de inserir

package cadastros;

import java.sql.SQLException;
import javax.swing.*;
import utilitarios.conexao;
/**
 *
 * @author JUNIOR
 */
public class equipamento
{
    private String numSerie;
    private String numPatrimonial;
    private String numNotaFiscal;
    private String status;
    private String observacoes;
    
    conexao conexaoEquipamento=new conexao();

public equipamento ()
{   
}
public void setNumSerie(String numSerie)
{
    this.numSerie=numSerie;
}
public void setNumPatrimonial(String numPatrimonial)
{
    this.numPatrimonial=numPatrimonial;
}
public void setNumNotaFiscal(String numNotaFiscal)
{
    this.numNotaFiscal=numNotaFiscal;
}
public void setStatus (String status)
{
    this.status=status;
}
public void setObservacoes (String observacoes)
{
    this.observacoes=observacoes;
}
public String getNumSerie ()
{
    return numSerie;
}
public String getNumPatrimonial()
{
    return numPatrimonial;
}
public String getStatus ()
{
    return status;
}
public String getObservacoes()
{
    return observacoes;
}
public void cadastrar()
{
    try
    {
        conexao conexEquipamento=new conexao();

        String sqlInsert="Insert into equipamento (numeroSerie,numeroPatrimonial,status,observacoes) " +
            "values ('"+numSerie+"','"+numPatrimonial+"','"+status+"','"+observacoes+"')";
        conexEquipamento.statement.execute(sqlInsert); 
         JOptionPane.showMessageDialog(null, "Gravação realizada com sucesso");
    }catch (SQLException erro)
    {
        JOptionPane.showMessageDialog(null, "O registro não pode ser salvo \n"+ erro);
    }
}
public void alterar()
{
    try
    {
        String sqlUpdate="update equipamento set numSerie='"+numSerie+"',numPatrimonial='"+numPatrimonial+
                "',status='"+status+"',observacoes='"+observacoes+"' where numSerie='"+numSerie+"'";
        conexaoEquipamento.statement.executeUpdate(sqlUpdate);
    }catch (SQLException erro)
    {
        JOptionPane.showMessageDialog(null, "O registro não pode ser apagado /n"+ erro);
    }
}
public void excluir()
{
    try
    {
        String sqlDelete="delete from equipamento where numSerie='"+numSerie+"'";
        conexaoEquipamento.statement.executeUpdate(sqlDelete);
    }catch (SQLException erro)
    {
        JOptionPane.showMessageDialog(null, "O registro não pode ser apagado /n"+ erro);
    }
}
public void buscar()
{

}
}

e abaixo o codigo da classe de conexão

package utilitarios;
import java.sql.*;
import javax.swing.*;
/**
 *
 * @author JUNIOR
 */
public class conexao
{
    //final usado para definir a constante. Não poderá ser alterada
   final private String driver="sun.jdbc.odbc.JdbcOdbcDriver";
   final private String url="jdbc:odbc:cadhard";//referencia ao q foi criado no painel de controles
   final private String usuario="";
   final private String senha="";
   private Connection conexao;
   public Statement statement;//abre caminho ateh o BD
   public ResultSet resultset;//armazena o resultado do sql

   public boolean conecta()
   {
       boolean result=true;
       try
       {
           Class.forName(driver);
           conexao=DriverManager.getConnection(url, usuario,senha);
           JOptionPane.showMessageDialog(null,"conectou");
       }catch (ClassNotFoundException Driver)
       {
            JOptionPane.showMessageDialog(null,"Driver não Localizado: "+Driver);
            result=false;
       }
       catch (SQLException Fonte)
       {
           JOptionPane.showMessageDialog(null, "Erro na Conexão com a fonte "+
                                                 "de dados: "+Fonte);
           result=false;
       }
       return result;
   }
   public void desconecta()
   {
       boolean result=true;
       try
       {
            conexao.close();
            JOptionPane.showMessageDialog (null,"banco Fechado");
       }
       catch (SQLException erroSQL)
       {
           JOptionPane.showMessageDialog(null, "Não foi possível fechar o Banco "
                                                +"de dados: "+erroSQL);
           result=false;
       }
   }
   public void executeSQL(String sql)
   {
       try
       {
           statement=conexao.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,resultset.CONCUR_READ_ONLY);//abre caminho para BD
           //os dois paramentro passado são para poder navegar pelo Statement, poid por padrão ele não permite
           resultset=statement.executeQuery(sql);//variavel receberá o sql
        }
       catch (SQLException sqlex)
       {
           JOptionPane.showMessageDialog(null,"Não foi possível executar o "
                             +"comando SQL. "+ sqlex+"O SQL passado foi "+sql);
       }

   }
}

tenho um formulario que chama o metodo de cadastro da classe equipamento, “setando” os valores preenchidos no formulario

se alguem puder me ajudar agradeço…

att.

EDIT (Moderador) - Por favor, use as tags [ code ] (use o botãozinho “code” que está à direita do botãozinho “B” que você usou para ressaltar seu texto.

5 Respostas

emmanuelrock

Amigo use a tag Code para formatar o código para ficar melhor a visualização no forum…

T

Rode seu programa passo a passo e verifique que, nesse ponto de seu programa, a variável “statement” ainda não foi preenchida; isso causou seu NullPointerException.

rodrigo.bossini

Aproveita que esse não tá funcionando, dá uma lidinha rápida sobre PreparedStatement, e passe a usar isso no lugar de Statement.

J

thingol, desculpe a “ignorancia”, mas estou iniciando em JAVA e em programação tbm… não entendi bem o que disse… como faria entaum para que ela fosse preenchida??? coloquei um showmessage em alguns pontos para ver onde parava de rodar e havia percebido que era nesse ponto msm… tenho um exemplo q até "“copiei” o modelo e esse funciona, com access tbm…

estou com aprendendo na marra, com umas video-aulas q tenho do professor Neri, não sei se conhece… sou bem cru em java ainda…

mas agradeço pela atenção cara…

T

Você ainda não entendeu por que é que statement não foi inicializado? É questão de você rodar seu programa passo a passo e ainda por cima entrando dentro dos métodos, para ver o que você está fazendo.

A solução para você é criar um método na sua classe conexao, chamado executeUpdateSQL, que é semelhante ao executeSQL só que chama o executeUpdate em vez de executeQuery. Acho que você é suficientemente esperto para criar esse tal método; não se subestime. Brasileiro tonto já nasceu morto.
Então chame o seu método executeUpdateSQL, em vez de chamar conexaoEquipamento.statement.executeUpdate.

Criado 23 de julho de 2009
Ultima resposta 23 de jul. de 2009
Respostas 5
Participantes 4