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.
staroski:
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:
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.