DAO não está inserindo no banco

4 respostas
adrianoseven

Bom amigos...

Fiz uma estutura simples com o DAO e a Classe FUNCIONARIO. Conectei atraves do NetBeans, tudo perfeito. ok.
Mas na hora de compilar recebo um erro de NULL POINTER EXCEPTION q está me tirando do sério....
Se alguem puder dar uma solução... segue abaixo o programa.

CLASSE FUNCIONARIO
package cadastrofuncionario;

/**
 *
 * @author Negrão
 */
public class Funcionario {
    private String nome;
    private int rg;
    private String cpf;
    private int nasc;
    private char sexo;
    private double salFunc;
    DAO db;        
    
    public Funcionario() {
        
    }

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public int getRg() {
        return rg;
    }

    public void setRg(int rg) {
        this.rg = rg;
    }

    public String getCpf() {
        return cpf;
    }

    public void setCpf(String cpf) {
        this.cpf = cpf;
    }

    public int getNasc() {
        return nasc;
    }

    public void setNasc(int nasc) {
        this.nasc = nasc;
    }

    public char getSexo() {
        return sexo;
    }

    public void setSexo(char sexo) {
        this.sexo = sexo;
    }

    public double getSalFunc() {
        return salFunc;
    }

    public void setSalFunc(double salFunc) {
        this.salFunc = salFunc;
    }
    
    public void insereFuncionario(){
       String tb= "func";
       String cp= "(nmFunc)";
       String vls= "('"+nome+"')";
       db.insere(tb, cp, vls);
        
    }
}
CLASSE DAO
package cadastrofuncionario;
import java.sql.*;

public class DAO {
    
    Connection con;
    Statement st;
    ResultSet res;
    int upd;
    StringBuilder msg= new StringBuilder();
  
    public DAO() {
    }
    
    public void conecta(){
        try{
            Class.forName("com.mysql.jdbc.Driver");
            con= DriverManager.getConnection("jdbc:mysql://localhost/projeto","","");
            st= con.createStatement();
            
        }catch(ClassNotFoundException e){
            msg.append("Erro Driver");
        }
        catch(SQLException e){
            msg.append("Não conectou no banco");
        }
    } // FIM CONECTA
    
    public void insere(String tb, String campos, String vals){
        conecta();
        try{
        String q= "insert into "+tb+" "+campos+ " values "+ vals;
        
        //Executar o SQL
        upd= st.executeUpdate(q);
        
        // Teste do banco
        if (upd!=0)
            msg.append("Insercao OK!");
        else
            msg.append("Erro: Insercao");
        }catch(SQLException e){
            msg.append("Erro: SQL insercao");
        }
        desconecta();
    }// FIM INSERE
    
    public void desconecta(){
        try{
            con.close();
        }catch(SQLException e){
            msg.append("Erro Desconecta");
        }
    } // FIM DESCONECTA
    
    //RETORNAR MENSAGENS
    public String getMsg(){
        return msg.toString();
    }
}
CLASSE MAIN
package cadastrofuncionario;

/**
 *
 * @author Negrão
 */
public class Main {
    
    /** Creates a new instance of Main */
    public Main() {
    }
    
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        Funcionario f= new Funcionario();
        DAO dbresp;
        f.setNome("Sonia");
        
        f.insereFuncionario();
        dbresp = new DAO();
        
    }
    
}
ERRO INFORMADO
Compiling 1 source file to C:\Documents and Settings\Negrão\CadastroFuncionario\build\classes
compile:
run:
Exception in thread "main" java.lang.NullPointerException
        at cadastrofuncionario.Funcionario.insereFuncionario(Funcionario.java:81)
        at cadastrofuncionario.Main.main(Main.java:30)
Java Result: 1
BUILD SUCCESSFUL (total time: 0 seconds)
Linha 81 do erro
db.insere(tb, cp, vls);
Linha 30
f.insereFuncionario();

4 Respostas

acdesouza

Você está criando a instancia do seu DAO depois do momento que vc precisa dele:

f.insereFuncionario();  
dbresp = new DAO();

Fora que a instancia que você está criando, não está sendo usada pela sua classe Funcionario

public void insereFuncionario(){  
       String tb= "func";  
       String cp= "(nmFunc)";  
       String vls= "('"+nome+"')";  
       db.insere(tb, cp, vls);  
          
    }

Faça a seguinte mudança no seu método insereFuncionario:

public void insereFuncionario(){  
       String tb= "func";  
       String cp= "(nmFunc)";  
       String vls= "('"+nome+"')";  
       db = new DAO();
       db.insere(tb, cp, vls);  
          
    }
somma

Ola,

de uma olhada nesta apostila ve se ajuda:

Leia o capítulo de JDBC - java.sql

Boa sorte!

adrianoseven

Eu instanciei o DAO dentro do metodo insereFuncionario.

Mas agora o NULLPOINTEREXCEPTION esta apontando tb no

upd= st.executeUpdate(q);

rdantas
NullPointerException indica que vc está tentando usar um objeto que vc ainda não instanciou.  uma lida com calma no seu código que vc deve estar comendo barriga em algum lugar .
Criado 1 de fevereiro de 2008
Ultima resposta 1 de fev. de 2008
Respostas 4
Participantes 4