NullPointerException em OO

Pessoal boa noite,
sei que estou com um problema simples mas não consigo resolver, é o seguinte:

tenho 3 pacotes, no pacote utilitários tenha uma classe conexão, no pacote controle tenho a classe cadastro para inserir no banco e no pacote view tenha tenho a classe cargo que é o formulario, quando utilizo somente a classe cargo com a classe conexão consigo inserir no banco normalmente, mas quando eu modifico esta classe cargo enviando um parâmetro para a classe cadastro dá erro de NullPointer… na hora que vai executar “objConexao.statement.executeUpdate(sql);”, segue os códigos abaixo:

alguém pode ajudar?

classe Conexao:

[code]package utilitarios;

import java.sql.;
import javax.swing.
;

public class conexao {

private Connection conexao;
public Statement statement;
public ResultSet resultset;

public boolean conecta() {
    boolean result = true;
    try {
        Class.forName("com.mysql.jdbc.Driver");
        conexao = DriverManager.getConnection("jdbc:mysql://localhost/controle estoque", "root", "root");
    } catch (ClassNotFoundException Driver) {
        JOptionPane.showMessageDialog(null, "Driver não encontrado: " + Driver);
        result = false;
    } catch (SQLException Fonte) {
        JOptionPane.showMessageDialog(null, "Ocorreu um erro na conexão: " + Fonte);
        result = false;
    }
    return result;
}

public void desconecta() {
    boolean result = true;
    try {
        conexao.close();
    } catch (SQLException fechaBanco) {
        JOptionPane.showMessageDialog(null, "Conexão ainda aberta: " + fechaBanco);
        result = false;
    }
}

public void executeSQL(String sql) {
    try {
        statement = conexao.createStatement(
                resultset.TYPE_SCROLL_SENSITIVE,resultset.CONCUR_READ_ONLY);//o parâmetro indica que o statement é navegável
        resultset = statement.executeQuery(sql);                  
        
    }catch(SQLException erroSQL){
        JOptionPane.showMessageDialog(null, "Erro ao executar SQL: "+ sql+" - " + erroSQL );
    }
}    

}[/code]

classe Cadastro:

[code]package controle;

import java.sql.SQLException;
import javax.swing.JOptionPane;
import utilitarios.conexao;

/**
*
*
*/
public class Cadastro {

conexao objConexao;

public Cadastro() {
    objConexao = new conexao();
    objConexao.conecta();
}

public void gravarDados(String sql) {       
    try {
        //dá o erro aqui
        objConexao.statement.executeUpdate(sql);
          } catch (SQLException erro) {
        JOptionPane.showMessageDialog(null, "Erro ao gravar dados " + erro);
    }
}

}[/code]

método da classe Cargo sem alteração:

public void gravarCargo() { //Cadastro cd = new Cadastro(); String sqlInsert = "insert into cargo (dep_cod,cargo_nome) values (" + getCodDepart() + ",'" + jtCargo.getText() + "')"; //cd.gravarDados(sqlInsert); try { objConexao.statement.executeUpdate(sqlInsert); } catch (SQLException erro) { JOptionPane.showMessageDialog(null, "Erro ao gravar dados " + erro); } jtCargo.setText(""); jtCargo.requestFocus(); preencheTable(sqlTable); }

método da classe Cargo alterado: (dá erro de NullPointer…)

public void gravarCargo() { Cadastro cd = new Cadastro(); String sqlInsert = "insert into cargo (dep_cod,cargo_nome) values (" + getCodDepart() + ",'" + jtCargo.getText() + "')"; cd.gravarDados(sqlInsert); //try { //objConexao.statement.executeUpdate(sqlInsert); //} catch (SQLException erro) { //JOptionPane.showMessageDialog(null, "Erro ao gravar dados " + erro); //} jtCargo.setText(""); jtCargo.requestFocus(); preencheTable(sqlTable); }

Provavelmente você não inicializou o statement antes de utilizar aquele método na classe Cadastro. Assim, o statement permanece nulo e qualquer método que você tentar usar dele resulta em NullPointerException.

Pelo que eu notei, seu statement só recebe algum objeto no método executeSQL:

statement = conexao.createStatement( resultset.TYPE_SCROLL_SENSITIVE,resultset.CONCUR_READ_ONLY);//o parâmetro indica que o statement é navegável

[quote=Trebloc]Provavelmente você não inicializou o statement antes de utilizar aquele método na classe Cadastro. Assim, o statement permanece nulo e qualquer método que você tentar usar dele resulta em NullPointerException.

Pelo que eu notei, seu statement só recebe algum objeto no método executeSQL:

statement = conexao.createStatement( resultset.TYPE_SCROLL_SENSITIVE,resultset.CONCUR_READ_ONLY);//o parâmetro indica que o statement é navegável [/quote]

Mas Trebloc eu usei o mesmo statement na classe Cargo e não deu erro, como devo iniciar ele?

Veja não está criando um novo “Statement” na classe conexão.

objConexao.createStatement(/*Parametros*/).executeUpdate("query");//faça assim...

Ou então use o método que você criou na classe de conexão, né?! executeSQL(String sql)

Abraço!

Oi,

Em nenhum momento você cria a variavel statement.

Logo, quando você for fazer:

objConexao.statement.executeUpdate(sqlInsert);

Na realidade você está fazendo:

objConexao.null.executeUpdate(sqlInsert);

Ou seja:

NullPointerException.

Percebi que o método executeSQL(String sql) da classe Conexao é responsável por criar instanciar a variavel statement. No qual não está sendo chamado.

Tchauzin!

[quote=walacy]Veja não está criando um novo “Statement” na classe conexão.

objConexao.createStatement(/*Parametros*/).executeUpdate("query");//faça assim...

Ou então use o método que você criou na classe de conexão, né?! executeSQL(String sql)

Abraço!

[/quote]

Valeu! Valeu! Valeu!

Obrigado a todos que me ajudaram, Trebloc, walacy, lina, analisando todas as opções que me deram consegui resolver criando um novo método na classe conexão, um específico para executar o “Update”, não sei se dará algum problema no futuro, mas está funcionando;
segue aí o código, e obrigado mesmo…

[code]public void executeUpdate(String query){
try {
conexao.createStatement().executeUpdate(query);
statement = conexao.createStatement(
resultset.TYPE_SCROLL_SENSITIVE, resultset.CONCUR_READ_ONLY);//o parâmetro indica que o statement é navegável

    }catch(SQLException erroSQL){
        JOptionPane.showMessageDialog(null, "Erro ao executar SQL: "+ query+" - " + erroSQL );
    }
}[/code]