Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Kinhas

[Resolvido] Lista de Objetos - Porque está nulo?

Recommended Posts

Bom dia pessoal,

 

tenho um método na minha classe DAO que se chama consultar,

 

Neesse método eu pego os dados do banco de dados e jogo em um objeto,

 

e depois jogo esse objeto rpa uma List,

 

O problema é que essa List fica mostrnaod null e eu não sei porque,

 

segue o código do Método,

 

A primeira parte é só a conexão:

 

public List<Veiculo> consultar(String modelo) {
       Veiculo v = null;
       List<Veiculo> carros = null;
       try {
           String driverName = "com.mysql.jdbc.Driver";
           Class.forName(driverName);

           // Configurando a nossa conexão com um banco de dados//

           String serverName = "localhost";    //caminho do servidor do BD
           String mydatabase = "faculdade";        //nome do seu banco de dados
           String url = "jdbc:mysql://" + serverName + "/" + mydatabase;
           String username = "root";        //nome de um usuário de seu BD
           //String passwordDB = "InuKinhas";      //sua senha de acesso
           String passwordDB = "Password1";      //sua senha de acesso
           Connection conn = DriverManager.getConnection(url, username, passwordDB);

           String mysql = "select id, modelo, placa, kms, montadora, ano from carro where modelo = ?";
           PreparedStatement stmt = conn.prepareStatement(mysql);
           stmt.setString(1, modelo);

           ResultSet rs = stmt.executeQuery();

           int cont = 0;
           if (rs.next()) {
               v = new Veiculo();
               v.setId(rs.getInt("id"));
               System.out.println("ID do carro: " + v.getId());
               v.setModelo(rs.getString("modelo"));
               System.out.println("Modelo do carro: " + v.getModelo());
               v.setPlaca(rs.getString("placa"));
               System.out.println("Placa do carro: " + v.getPlaca());
               v.setKms(rs.getString("kms"));
               System.out.println("Kms do carro: " + v.getKms());
               v.setMontadora(rs.getString("montadora"));
               System.out.println("Montadora do carro: " + v.getMontadora());
               v.setAno(rs.getString("ano"));
               System.out.println("Ano do carro: " + v.getAno());
              carros.add(cont, v);
              cont++;
           }

       } catch (Exception e) {
           System.out.println("ERRO: " + e.getMessage());
           e.printStackTrace();
       }
       return carros;
   }

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mas Pvpzaum, la dentro do rs.Next(),

 

eu populo o objeto Veiculo e logo em seguida eu jogo o Objeto populado pra dentro da List,

 

Lá em cima eu só criei ela como null,

 

o que será que está errado?

 

EDIT.

 

Pvpzaum consegui fazendo dessa forma:

List<Veiculo> carros = new LinkedList();
carros = new ArrayList();

Só isso e já funcionou.

 

Obrigado pela ajuda, porém não entendi porque eu setando inicialmente como null não funciona =//

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não funcionou pelo motivo que eu falei o seu objeto é nulo e logo ele não vale nada por isso retorna null independente de você fazer popular ele a frente ou não entendeu?

 

Um exemplo:

Uma variavel quando não instanciada é nula ou seja ainda não é um objeto.

 

Objeto a; // a = null;
a = new Objeto(); // a deixa de ser null e vira um objeto do tipo Objeto.

 

Seu erro:

Veiculo v = null; // v = null
List<Veiculo> carros = null; // dentro da lista Veículos carros seria nulo sendo sua lista Veículos ja sendo vazia. Veiculo(Objeto) não servindo para nada.

 

Entendeu?

Compartilhar este post


Link para o post
Compartilhar em outros sites

A explicação é simples. Você pode muito bem deixar do jeito que estava: atribuindo valor null inicialmente para o objeto e para a lista. Entretanto teria que instanciá-los depois. O que acontece é que você recebia um NullPointerException na hora de adicionar o objeto na lista "carros.add(veiculo)". Porém, como estava tudo dentro de um bloco try/catch, o código passava pelo bloco catch, imprimia a pilha de erros e logo depois saía do bloco try/catch retornando a lista que nunca tinha sido instanciado: ou seja, null. Por isso a solução é apenas instanciar a lista antes de usá-la.

 

Pra evitar este tipo de armadilha, é bom sempre colocar dentro do bloco try/catch apenas aquilo que realmente dispara exceção verificada.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.