Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Dúvida Isolando o acesso aos dados e o DAO

Bom dia!!! Estou com um problema no meu código mas nao consigo achar onde esta o erro. Se alguem puder ajudar fico muito grato. Toda vez que rodo ele apresenta esse erro:

Exception in thread "main" java.lang.NullPointerException
    at br.com.caelum.jdbc.ProdutosDAO.lista(ProdutosDAO.java:50)
    at br.com.caelum.jdbc.TestaInsercaoDeProduto.main(TestaInsercaoDeProduto.java:19)

Segue os codigos da aplicação:

package br.com.caelum.jdbc;

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

import br.com.caelum.jdbc.modelo.Produto;

public class TestaInsercaoDeProduto {

    public static void main(String[] args) throws SQLException {

        Produto mesa = new Produto("Mesa azul", "Mesa com 4 cadeiras");

        try (Connection con = new ConnectionPool().getConnection()) {
            ProdutosDAO dao = new ProdutosDAO(con);
            dao.salva(mesa);

            List<Produto> produtos = dao.lista();
            for (Produto produto : produtos) {
                System.out.println("Existe o produto: " + produto);

            }
        }

    }
}
package br.com.caelum.jdbc.modelo;

public class Produto {

    int id;
    String nome;
    String descricao;

    public Produto(String nome, String descricao) {
        this.nome = nome;
        this.descricao = descricao;
    }

    public String getNome() {
        return nome;
    }

    public String getDescricao() {
        return descricao;
    }

    public void setId(int id) {
        this.id = id;
    }

    @Override
    public String toString() {
        return String.format("[produto: %d %s %s]", id, nome, descricao);
    }

}
package br.com.caelum.jdbc;

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

import br.com.caelum.jdbc.modelo.Produto;

public class ProdutosDAO {

    private Connection con;

    public ProdutosDAO(Connection con) {
        this.con = con;

    }

    public void salva(Produto produto) throws SQLException {

        String sql = "insert into Produto (nome, descricao) values (?,?)";

        try (PreparedStatement stmt = con.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS)) {

            stmt.setString(1, produto.getNome());
            stmt.setString(2, produto.getDescricao());
            stmt.execute();

            try (ResultSet rs = stmt.getGeneratedKeys()) {
                if (rs.next()) {
                    int id = rs.getInt("id");
                    produto.setId(id);
                }
            }

        }
    }

    public List<Produto> lista() throws SQLException {
        List<Produto> produtos = new ArrayList<>();

        String sql = "select * from Produto";

        try (PreparedStatement stmt = con.prepareStatement(sql)) {
            stmt.executeQuery();
            try (ResultSet rs = stmt.getResultSet()) {
                while (rs.next()) {
                    int id = rs.getInt("id");
                    String nome = rs.getString("nome");
                    String descricao = rs.getString("descricao");
                    Produto produto = new Produto(nome, descricao);
                    produto.setId(id);
                    produtos.add(produto);
                }
            }
        }
        return produtos;

    }
}
package br.com.caelum.jdbc;

import java.sql.Connection;
import java.sql.SQLException;
import javax.sql.DataSource;
import org.hsqldb.jdbc.JDBCPool;

public class ConnectionPool {

    private DataSource dataSoure;

    public ConnectionPool() {

        JDBCPool pool = new JDBCPool();
        pool.setUrl("jdbc:hsqldb:hsql://localhost/loja-virtual");
        pool.setUser("SA");
        pool.setPassword("");

        this.dataSoure = pool;

    }

    Connection getConnection() throws SQLException {
        Connection connection = dataSoure.getConnection();
        return connection;

    }

}
1 resposta
solução!

Já achei o erro na classe Produtos DAO no metodo lista na linha que executa o stmt ao invés de escrever stmt.execute(); eu escrevi stmt.executeQuery();. Assim que corrigi parou de dar exception. :)