Porque não popula ? TRABALHO DE FACULDADE

5 respostas
programaçãojava
valentinOliveira

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

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");
        }
        
    }
    
}

5 Respostas

lvbarbosa

NullPointerException

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:

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");
        }
    }
}
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

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 <strong>con</strong>, 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.

Criado 23 de junho de 2017
Ultima resposta 24 de jun. de 2017
Respostas 5
Participantes 4