Ele conecta lindo ao banco de dados, mais nao popula, ele para na parte aonde esta o String SQL = "...(Parametros para popular no banco)..."
packageanimal;importjava.sql.*;importjavax.swing.JOptionPane;publicclassanimalDAO{publicstaticvoidmain(Stringargs[])throwsSQLException{animala=newanimal();connectionFactoryconn=newconnectionFactory();Connectioncon=null;PreparedStatementstmt=null;ResultSetrst=null;a.setNome(JOptionPane.showInputDialog("NOME DO ANIMAL: "));StringcloneIdade=JOptionPane.showInputDialog("IDADE DO ANIMAL: ");IntegerclonedIdade=Integer.parseInt(cloneIdade);a.setIdade(clonedIdade);a.setRaca(JOptionPane.showInputDialog("DIGITE A RAÇA: "));a.setDono(JOptionPane.showInputDialog("NOME DO DONO: "));StringcloneTelefone=JOptionPane.showInputDialog("TELEFONE:");IntegerclonedTelefone=Integer.parseInt(cloneTelefone);a.setTelefone(clonedTelefone);Stringsql="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(SQLExceptionerror){JOptionPane.showMessageDialog(null,"ERRO AO POPULAR");}}}
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:
packageanimal;importjava.sql.*;importjavax.swing.JOptionPane;publicclassanimalDAO{publicstaticvoidmain(Stringargs[])throwsSQLException{try{animala=newanimal();connectionFactoryconn=newconnectionFactory();Connectioncon=null;PreparedStatementstmt=null;ResultSetrst=null;a.setNome(JOptionPane.showInputDialog("NOME DO ANIMAL: "));StringcloneIdade=JOptionPane.showInputDialog("IDADE DO ANIMAL: ");IntegerclonedIdade=Integer.parseInt(cloneIdade);a.setIdade(clonedIdade);a.setRaca(JOptionPane.showInputDialog("DIGITE A RAÇA: "));a.setDono(JOptionPane.showInputDialog("NOME DO DONO: "));StringcloneTelefone=JOptionPane.showInputDialog("TELEFONE:");IntegerclonedTelefone=Integer.parseInt(cloneTelefone);a.setTelefone(clonedTelefone);Stringsql="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(Throwableerror){error.printStackTrace();JOptionPane.showMessageDialog(null,"ERRO AO POPULAR");}}}
valentinOliveira
então, eu tentei arrumar aqui mas o nullPointerException continua, teria como corrigir ? para ver se eu consigo entender ?
valentinOliveira
então, eu tentei arrumar aqui mas o nullPointerException continua, tem como me ajudar ? corrigindo o erro ? eu estou com certa dificuldade
A
anon62916717
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;
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:
importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.PreparedStatement;importjava.sql.ResultSet;importjava.sql.SQLException;importjava.util.logging.Level;importjava.util.logging.Logger;importjavax.swing.JOptionPane;publicclassEstatistica{publicstaticvoidmain(Stringargs[]){Stringurl="jdbc:postgresql://localhost:5432/basedados";Stringusuario="xxxx";Stringsenha="xxxx";try{Class.forName("org.postgresql.Driver");Connectioncon=DriverManager.getConnection(url,usuario,senha);//ajuste o que estiver acima para se conectar com o banco de dados que você usaPreparedStatementstmt;ResultSetrst=null;Animala=newAnimal();a.setNome(JOptionPane.showInputDialog("NOME DO ANIMAL: "));StringcloneIdade=JOptionPane.showInputDialog("IDADE DO ANIMAL: ");IntegerclonedIdade=Integer.parseInt(cloneIdade);a.setIdade(clonedIdade);a.setRaca(JOptionPane.showInputDialog("DIGITE A RAÇA: "));a.setDono(JOptionPane.showInputDialog("NOME DO DONO: "));StringcloneTelefone=JOptionPane.showInputDialog("TELEFONE:");IntegerclonedTelefone=Integer.parseInt(cloneTelefone);a.setTelefone(clonedTelefone);Stringsql="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|SQLExceptionex){Logger.getLogger(Estatistica.class.getName()).log(Level.SEVERE,null,ex);JOptionPane.showMessageDialog(null,"ERRO AO POPULAR");}}}
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.