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