Porque não popula ? TRABALHO DE FACULDADE

Ele conecta lindo ao banco de dados, mais nao popula, ele para na parte aonde esta o String SQL = “…(Parametros para popular no banco)…”

[code]
package animal;

import java.sql.*;
import javax.swing.JOptionPane;

public class animalDAO {

public static void main(String args[]) throws SQLException{
    animal a = new animal();
    connectionFactory conn = new connectionFactory();
    Connection con = null;
    PreparedStatement stmt = null;
    ResultSet  rst = null;
    
    a.setNome(JOptionPane.showInputDialog("NOME DO ANIMAL: "));
    String cloneIdade = JOptionPane.showInputDialog("IDADE DO ANIMAL: ");
    Integer clonedIdade = Integer.parseInt(cloneIdade);
    a.setIdade(clonedIdade);
    a.setRaca(JOptionPane.showInputDialog("DIGITE A RAÇA: "));
    a.setDono(JOptionPane.showInputDialog("NOME DO DONO: "));
    String cloneTelefone = JOptionPane.showInputDialog("TELEFONE:");
    Integer clonedTelefone = Integer.parseInt(cloneTelefone);
    a.setTelefone(clonedTelefone);
    
    String sql = "Insert into animal(nome, idade, raca, dono, telefone) values(?,?,?,?,?)";
    
    try{
        
    stmt = con.prepareStatement(sql);
    
    stmt.setString(1, a.getNome());
    stmt.setInt(2, a.getIdade());
    stmt.setString(3, a.getRaca());
    stmt.setString(4, a.getDono());
    stmt.setInt(5, a.getTelefone());
    
    stmt.execute();
    JOptionPane.showMessageDialog(null, "CONCLUIDO");
    }catch(SQLException error){
        JOptionPane.showMessageDialog(null,"ERRO AO POPULAR");
    }
    
}

}[/code]

NullPointerException

Não, na verdade ele pára onde está stmt = con.prepareStatement(sql); pois você não inicializou a variável con.

Faz o try-catch assim, que vai perceber melhor o erro:

package animal;

import java.sql.*;
import javax.swing.JOptionPane;

public class animalDAO {

    public static void main(String args[]) throws SQLException{
        try{
            animal a = new animal();
            connectionFactory conn = new connectionFactory();
            Connection con = null;
            PreparedStatement stmt = null;
            ResultSet  rst = null;
            a.setNome(JOptionPane.showInputDialog("NOME DO ANIMAL: "));
            String cloneIdade = JOptionPane.showInputDialog("IDADE DO ANIMAL: ");
            Integer clonedIdade = Integer.parseInt(cloneIdade);
            a.setIdade(clonedIdade);
            a.setRaca(JOptionPane.showInputDialog("DIGITE A RAÇA: "));
            a.setDono(JOptionPane.showInputDialog("NOME DO DONO: "));
            String cloneTelefone = JOptionPane.showInputDialog("TELEFONE:");
            Integer clonedTelefone = Integer.parseInt(cloneTelefone);
            a.setTelefone(clonedTelefone);
            String sql = "Insert into animal(nome, idade, raca, dono, telefone) values(?,?,?,?,?)";
            stmt = con.prepareStatement(sql);
            stmt.setString(1, a.getNome());
            stmt.setInt(2, a.getIdade());
            stmt.setString(3, a.getRaca());
            stmt.setString(4, a.getDono());
            stmt.setInt(5, a.getTelefone());
            stmt.execute();
            JOptionPane.showMessageDialog(null, "CONCLUIDO");
        } catch (Throwable error) {
		    error.printStackTrace();
            JOptionPane.showMessageDialog(null, "ERRO AO POPULAR");
        }
    }
}

então, eu tentei arrumar aqui mas o nullPointerException continua, teria como corrigir ? para ver se eu consigo entender ?

então, eu tentei arrumar aqui mas o nullPointerException continua, tem como me ajudar ? corrigindo o erro ? eu estou com certa dificuldade

As classes devem ter a letra inicial maiúscula por convenção.
Renomei suas classes, para atender ao padrão.

Na citação acima tem duas conexoes conn = ok e con = null;

Na citação acima: stmt = con.prepareStatement(sql);
Mas você não inicializou a variável con, logo a chamada é stmt = null.prepareStatement(sql);
Resultado: nullPointerException.
Sugestão utilizar e inicializar somente uma variável de conexão.

Realmente @staroski já tinha encontrado o erro.

Só vi isso depois de fazer e postar a codificação a mais a frete.

Com base em sua classe animal gerei minha classe Animal, testei com o Postgres e não teve problema.

Classe de teste:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JOptionPane;

public class Estatistica {

    public static void main(String args[]){
        String url ="jdbc:postgresql://localhost:5432/basedados";
        String usuario="xxxx";
        String senha = "xxxx";

        try {
            Class.forName("org.postgresql.Driver");
            Connection con = DriverManager.getConnection(url, usuario, senha);
            //ajuste o que estiver acima para se conectar com o banco de dados que você usa
            PreparedStatement stmt;
            ResultSet  rst = null;
            Animal a = new Animal();
            
            
            a.setNome(JOptionPane.showInputDialog("NOME DO ANIMAL: "));
            String cloneIdade = JOptionPane.showInputDialog("IDADE DO ANIMAL: ");
            Integer clonedIdade = Integer.parseInt(cloneIdade);
            a.setIdade(clonedIdade);
            a.setRaca(JOptionPane.showInputDialog("DIGITE A RAÇA: "));
            a.setDono(JOptionPane.showInputDialog("NOME DO DONO: "));
            String cloneTelefone = JOptionPane.showInputDialog("TELEFONE:");
            Integer clonedTelefone = Integer.parseInt(cloneTelefone);
            a.setTelefone(clonedTelefone);
            String sql = "Insert into animal(nome, idade, raca, dono, telefone) values(?,?,?,?,?)";
            stmt = con.prepareStatement(sql);
            stmt.setString(1, a.getNome());
            stmt.setInt(2, a.getIdade());
            stmt.setString(3, a.getRaca());
            stmt.setString(4, a.getDono());
            stmt.setInt(5, a.getTelefone());
            stmt.execute();
            System.out.println("Conexão realizada com sucesso.");
            
        } catch (ClassNotFoundException | SQLException ex) {
            Logger.getLogger(Estatistica.class.getName()).log(Level.SEVERE, null, ex);
            JOptionPane.showMessageDialog(null, "ERRO AO POPULAR");
        }
    }
}

Classe Animal gerada com base em sua codificação:

public class Animal {
    private String nome, raca, dono;
    private int idade, telefone;

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

    public void setIdade(int idade) {
        this.idade = idade;
    }

    public void setRaca(String raca) {
        this.raca = raca;
    }

    public void setDono(String dono) {
        this.dono = dono;
    }

    public void setTelefone(int telefone) {
        this.telefone = telefone;
    }

    public String getNome() {
        return nome;
    }

    public String getRaca() {
        return raca;
    }

    public String getDono() {
        return dono;
    }

    public int getIdade() {
        return idade;
    }

    public int getTelefone() {
        return telefone;
    } 
}

A variável rst está ser função.
Procurei aproveitar ao máximo a sua codificação entretanto pra testar tive fazer uso de um banco de dados, alterando a conexão para atender a minha perspectiva.