Solucionado (ver solução)
Solucionado
(ver solução)
5
respostas

Erro acompanhando o vídeo do capítulo 7 de Java e ODBC

Pessoal, fiz toda a sequencia do vídeo e quando fui executar a funcionalidade que lista os registros da tabela Categoria deu o seguinte erro: Exception in thread "main" java.lang.NullPointerException at br.com.empresa.jdbc.TestaCategorias.main(TestaCategorias.java:15) Não tenho ideia de como resolver. Alguém poderia me dar uma dica? O código está abaixo:

import java.sql.Connection;
import java.sql.SQLException;
import java.util.List;

import br.com.empresa.jdbc.dao.CategoriasDAO;
import br.com.empresa.jdbc.modelo.Categoria;

public class TestaCategorias {

    public static void main(String[] args) throws SQLException {
        try (Connection con = new ConnectionPool().getConnection()) {
            List<Categoria> categorias = new CategoriasDAO(con).lista();
            for(Categoria categoria : categorias) {
                System.out.println(categoria.getNome());
            }

        }
    }

}

package br.com.empresa.jdbc.modelo;

public class Categoria {

    private final int id;
    private final String nome;

    public Categoria(int id, String nome) {
        this.id   = id;
        this.nome = nome;
    }

    public String getNome() {
        return this.nome;
    }

}

package br.com.empresa.jdbc.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import br.com.empresa.jdbc.modelo.Categoria;

public class CategoriasDAO {

    private final Connection con;

    public CategoriasDAO(Connection con) {
        this.con = con;
    }

    public List<Categoria> lista() throws SQLException {
        List<Categoria> categorias = new ArrayList<>();

        String sql = "select * from Categoria";
        try(PreparedStatement stmt = con.prepareStatement(sql)) {
            stmt.execute();
            try(ResultSet rs = stmt.getResultSet()) {
                while (rs.next()) {
                    int id = rs.getInt("id");
                    String nome = rs.getString("nome");
                    Categoria categoria = new Categoria(id, nome);
                    categorias.add(categoria);
                }
            }
        }
        return null;
    }

}
5 respostas

Mario estou sem minha IDE aqui, mais o erro não seria na inicialização da sua Categoria? Não falto você iniciar? Tipo

public class TestaCategorias {

    public static void main(String[] args) throws SQLException {
        try (Connection con = new ConnectionPool().getConnection()) {
    Categoria categoria = new Categoria(); // algo parecido com isso?
            List<Categoria> categorias = new CategoriasDAO(con).lista();
            for(Categoria categoria : categorias) {
                System.out.println(categoria.getNome());
            }

        }
    }

Alisson,

Não me parece ser isso, pois este instanciamento já ocorre no comando: for(Categoria categoria : categorias) Se eu fizer a declaração: Categoria categoria = new Categoria(), o compilador acusa duplicidade na linha: for(Categoria categoria : categorias)

Ata agora to aqui com a IDE, acho que o erro está nessa parte.

  public List<Categoria> lista() throws SQLException {
        List<Categoria> categorias = new ArrayList<>();

        String sql = "select * from Categoria";
        try(PreparedStatement stmt = con.prepareStatement(sql)) {
            stmt.execute();
            try(ResultSet rs = stmt.getResultSet()) {
                while (rs.next()) {
                    int id = rs.getInt("id");
                    String nome = rs.getString("nome");
                    Categoria categoria = new Categoria(id, nome);
                    categorias.add(categoria);
                }
            }
        }
        return null; // ta vendo que você ta retornando null?
    return categorias; // nao seria o cerreto? ja que o 
metodo é do tipo lista?
 Nada mais correto do que retornar sua lista de categorias
    }
solução!

Perfeito Alisson, muito obrigado!

nois mano