Olá pessoal, dúvida não estou conseguindo inserir o contato no banco

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;


public class FabricaDeConexoes {
    static Connection c = null;//inicia desconectado
    
    public static Connection pegaConexao() throws RuntimeException {
      if(c==null){
         try{
           c = DriverManager.getConnection("jdbc:mysql://localhost:3306/fj21","4321","admin");
           System.out.println("conectou");
         }
         catch(SQLException e){
             System.out.println("Nao conseguiu conectar");
             throw new RuntimeException(e);
         }
      }
      return c;
    
    }
    
    
    public static void fechaConexao(){
       if(c!=null){
          try{
           c.close();
          }
          catch(SQLException e){
             System.out.println("Nao conseguiu fechar conexao");
         }
       }
    }
    
}

public class Contato {
    
   private Long id;
   private String nome;
   private String email;
   private String endereco;
   
    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getNome() {
        return nome;
    }

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

    public String getEmail() {
        return email;
    }

    public void setEndereco(String endereco) {
        this.endereco = endereco;
    }

	public String getEndereco() {
		
		return endereco;
	}

	public void setEmail(String email) {
        this.email = email;
		
	}

	
   
}
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;

public class ContatoDAO {
    //a conexão com o banco de dados
    private Connection c;
      
    //construtor faz a conexao
    ContatoDAO(){
    	
        //Passo 1
        try {
            //Pede a fabrica uma instancia da conexao
            c = FabricaDeConexoes.pegaConexao();
        } catch (RuntimeException e) {
            System.out.println("Nao conseguiu pegar a conexao " + e);
        }
    }
    
    public void adiciona(Contato a) throws SQLException{
    
        PreparedStatement p;
        String s;

        //Passo 2 
        s = "insert into contatos (nome,email,endereco) values (?,?,?)";

        try{
          //Passo 3
          p = c.prepareStatement(s);
          p.setString(1, a.getNome());
          p.setString(2, a.getEmail());
          p.setString(3, a.getEndereco());

          //Passo 4
          p.execute();
          p.close();
          
        } catch (RuntimeException e) {
           System.out.println("Nao conseguiu inserir o contato " + e);

       //  OBS.: Aparece essa mensagem ( Não conseguiu inserir o contato java.lang.NullPointerException).
                     Fiz algumas alterações sugeridas mais ficou na mesma, acho que não entendi o que deve ser
                     feito. Será que alguém pode implementar está parte do código para eu entender como faz.
                     No aguardo, obrigado.
            
            
        }
     
    }

	      
}
import java.sql.SQLException;

public class PopularContato {

    
    public static void main(String[] args) throws SQLException {
            //instacia o JavaBean
            Contato a = new Contato();
            
            //Popular o objeto a
            a.setNome("charles");
            a.setEmail("charles@hotmail.com");
            a.setEndereco("R. Pastor Antônio Polito 3256 cj56");
            
            //grave nessa conexão
            ContatoDAO adao = new ContatoDAO();
            
            //método elegante            
            adao.adiciona(a);
            
            System.out.println("Gravado!");
   }
}

Bom, voce verificou se o Driver do banco esta no projeto?
o erro pode estar no PreparedStatement, verifica o driver!!!

          p = c.prepareStatement(s);  
          p.setString(1, a.getNome());  
          p.setString(2, a.getEmail());  
          p.setString(3, a.getEndereco()); 

Uma destas variáveis está nula (ou c ou p ou a).

Detalhe: Você deve criar variáveis com nomes coerentes ao objeto que será utilizado.
p, c, a não são variáveis facilmente identificáveis. Podemm representar uma infinidade de coisas.

Ah, o stackTrace diz em que linha o NullPointerException ocorre.
Pode verificar e, se tiver dúvidas, poste aqui o stackTrace também.

C está nulo.
Você só não terá C = null quando instanciar a classe ContatoDAO.
Colocou para abrir a conexão dentro do construtor da classe, então a conexão só será aberta quando fizer um new ContatoDAO().

veja aqui: http://guj.com.br/java/255555-polimorfismo

olhe o ultimo post q respondi…

t+ e boa sorte.

[quote=drsmachado] p = c.prepareStatement(s); p.setString(1, a.getNome()); p.setString(2, a.getEmail()); p.setString(3, a.getEndereco());
Uma destas variáveis está nula (ou c ou p ou a).

Detalhe: Você deve criar variáveis com nomes coerentes ao objeto que será utilizado.
p, c, a não são variáveis facilmente identificáveis. Podemm representar uma infinidade de coisas.

Ah, o stackTrace diz em que linha o NullPointerException ocorre.
Pode verificar e, se tiver dúvidas, poste aqui o stackTrace também.[/quote]

Olhar o stackTrace de erro e ver onde a mensagem é disparada, nada né?