Erro ao inserir dados do JAVA para um banco do Access

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.

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

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.

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

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…

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.