[RESOLVIDO] java.lang.NullPointerException

3 respostas
manuBittencourt

Bom dia.

Vejam se conseguem identificar onde está o erro, por favor.

Classe Conexao

package br.com.tutorial;
import java.lang.*;
import java.sql.*;

public class Conexao {
    private String url = "jdbc:mysql://127.0.01/tutorial?user=root&password=root";
    
    public Connection abrirConexao(){
        try{
            Class.forName("com.mysql.jdbc.Driver").newInstance();
            Connection con = DriverManager.getConnection(url);
            System.out.println("Conexao com Banco de Dados estabelecida.");
        }
        catch (SQLException erroSQL) {
            System.out.println("Erro na conexão com o Banco "+erroSQL.getMessage());
        }
        catch (ClassNotFoundException erroClass){
            System.out.println("Erro ao carregar o Driver "+erroClass.getMessage());
        }
        catch (Exception e){
            System.out.println("Ocoreru um erro: "+e.getMessage());
        }
        return null;
    }
    
    public static void fecharConexao(Connection con){
        try{
            con.close();
            System.out.println("Conexao com o Banco de Dados fechada.");
        }   
        catch (SQLException erroSQL){
            System.out.println("Erro na comunicação com o Banco "+erroSQL.getMessage());
        }
        catch (Exception e){
            System.out.println("Ocorreu um erro: "+e.getMessage());
        }
    }
    
    public static void main (String[] args){
        new Conexao().abrirConexao();
    }
}

Classe ProprietarioDAO

package br.com.tutorial;
import java.io.IOException;
import java.sql.*;
import java.util.*;

public class ProprietarioDAO {
    private Connection con;
    
    public ProprietarioDAO(Connection con){
        setCon(con);
    }

    public Connection getCon() {
        return con;
    }

    public void setCon(Connection con) {
        this.con = con;
    }
    
    public String inserir(ProprietarioBean proprietario){
        String sql = "INSERT INTO "
                    +"proprietario(nome,cidade) "
                    +"VALUES(?,?)";
        
        try{
            PreparedStatement p = getCon().prepareStatement(sql);
            p.setString(1, proprietario.getNome());
            p.setString(2, proprietario.getCidade());
            
            if (p.executeUpdate() > 0) {
                return "Dados inseridos com sucesso!";
            }
            else return "Erro ao inserir!";
        }
        catch (SQLException e){
            e.printStackTrace();
            return "SQLException: "+e.getMessage();            
        }
    }
}

Classe Teste

package br.com.tutorial;
import java.sql.*;
import java.util.*;

public class Teste {
    public static void main(String[] args){
        Conexao conexao = new Conexao();
        Connection con = conexao.abrirConexao();
        
        ProprietarioBean pb = new ProprietarioBean();
        ProprietarioDAO pd = new ProprietarioDAO(con);
        
        pb.setNome("João");
        pb.setCidade("Brasília");

        pd.inserir(pb);
    }
    
}
O erro é os seguinte:

Conexao com Banco de Dados estabelecida.

Exception in thread main java.lang.NullPointerException

at br.com.tutorial.ProprietarioDAO.inserir(ProprietarioDAO.java:41)

at br.com.tutorial.Teste.main(Teste.java:23)

Java Result: 1

A linha 41 da Classe ProprietarioDAO é esta aqui:
PreparedStatement p = getCon().prepareStatement(sql);

E a linha 23 da Classe Teste:
pd.inserir(pb);

Não consegui identificar porque que está dando Null Pointer…

3 Respostas

R

Tem um errinho na sua classe Conexao...

package br.com.tutorial;  
    import java.lang.*;  
    import java.sql.*;  
      
    public class Conexao {  
        private String url = "jdbc:mysql://127.0.01/tutorial?user=root&password=root";  
          
        public Connection abrirConexao(){  
            try{  
                Class.forName("com.mysql.jdbc.Driver").newInstance();  
                Connection con = DriverManager.getConnection(url);  
                System.out.println("Conexao com Banco de Dados estabelecida.");  
            }  
            catch (SQLException erroSQL) {  
                System.out.println("Erro na conexão com o Banco "+erroSQL.getMessage());  
            }  
            catch (ClassNotFoundException erroClass){  
                System.out.println("Erro ao carregar o Driver "+erroClass.getMessage());  
            }  
            catch (Exception e){  
                System.out.println("Ocoreru um erro: "+e.getMessage());  
            } 
 
            //VOCÊ ESQUECEU QUE RETORNAR A VARIÁVEL CONECTION AQUI (CORRIGIDO)
            return con;  
        }  
          
        public static void fecharConexao(Connection con){  
            try{  
                con.close();  
                System.out.println("Conexao com o Banco de Dados fechada.");  
            }     
            catch (SQLException erroSQL){  
                System.out.println("Erro na comunicação com o Banco "+erroSQL.getMessage());  
            }  
            catch (Exception e){  
                System.out.println("Ocorreu um erro: "+e.getMessage());  
            }  
        }  
          
        public static void main (String[] args){  
            new Conexao().abrirConexao();  
        }  
    }

Um abraço!!!

Rodrigo_Sasaki

Leia o comentário acima hehehe… viajei na minha resposta

manuBittencourt

Por isso que é bom mostrar a outras pessoas… eu olhei o código mil vezes e não encontrava.
Fiz a alteração sugerida e funcionou.

Muito obrigada!

Criado 26 de abril de 2012
Ultima resposta 26 de abr. de 2012
Respostas 3
Participantes 3