Javafree
Página Inicial do Fórum > Banco de Dados - JDBC / SQL

Select simples com PreparedStatement



Criar novo tópico   Responder tópico
  1. Comment Arrow

    Publicado em: 13/07/2015 16:52:27

    Oi, eu estou fazendo um programa e quero exibir todo o conteúdo do banco de dados em uma tabela no jframe. Só que quando chamo o método dá erro "null". Aqui está o código:

    Classe Banco <pacote dao>

    public List<Cliente> getLista(String nome) throws SQLException {
    String sql = "select * from cliente";
    PreparedStatement stmt = this.conexao.prepareStatement(sql);
    ResultSet rs = stmt.executeQuery();
    List<Cliente> minhaLista = new ArrayList<Cliente>();

    while (rs.next()) {
    Cliente c = new Cliente();
    c.setId(Integer.parseInt(rs.getString("id"));
    c.setNome(rs.getString("nome");
    c.setEndereco(rs.getString("endereco");
    c.setCidade(rs.getString("cidade");
    c.setBairro(rs.getString("bairro");
    c.setCpf(rs.getString("cpf");
    c.setTelefone(rs.getString("telefone");
    c.setEmail(rs.getString("email");
    c.setSexo(rs.getString("sexo");
    minhaLista.add(c);
    }
    rs.close();
    stmt.close();
    return minhaLista;
    }

    classe TelaPrincipal jframe

    private void mostrarBanco(List<Cliente> contatos) {
    try {
    while (tmCliente.getRowCount() > 0) {
    tmCliente.removeRow(0);
    }
    String[] linha = new String[] {null,null,null,null,null,null,null,null,null,null};
    for (int i = 0; i < cliente.size(); i++) {
    tmCliente.addRow(linha);
    tmCliente.setValueAt(cliente.get(i).getId(), i, 0);
    tmCliente.setValueAt(cliente.get(i).getNome(), i, 1);
    tmCliente.setValueAt(cliente.get(i).getEndereco(), i, 2);
    tmCliente.setValueAt(cliente.get(i).getCidade(), i, 3);
    tmCliente.setValueAt(cliente.get(i).getBairro(), i, 4);
    tmCliente.setValueAt(cliente.get(i).getCpf(), i, 5);
    tmCliente.setValueAt(cliente.get(i).getRg(), i, 6);
    tmCliente.setValueAt(cliente.get(i).getTelefone(), i, 7);
    tmCliente.setValueAt(cliente.get(i).getEmail(), i, ;
    tmCliente.setValueAt(cliente.get(i).getSexo(), i, 9);
    }
    }catch (Exception e) {
    JOptionPane.showMessageDialog(null,"erro:" + e.getMessage());
    }
    }



  1. staroski
    Posts:4600


    Comment Arrow

    Publicado em: 13/07/2015 18:04:30

    Modifica esse teu código aqui:


    Colocando o printStackTrace(), assim fica fácil descobrir onde está o erro:

    _________________

    Ricardo Artur Staroski, OCP-JP
    Blumenau - SC
    http://www.staroski.com.br

    Acesse http://www.guj.com.br/

  1. Comment Arrow

    Publicado em: 13/07/2015 19:15:29

    Deu isso aqui:
    java.lang.NullPointerException
    at visao.TelaPrincipal.mostrarBanco(TelaPrincipal.java:24)
    at visao.TelaPrincipal.btnClienteActionPerformed(TelaPrincipal.java:174)
    at visao.TelaPrincipal.access$000(TelaPrincipal.java:
    at visao.TelaPrincipal$1.actionPerformed(TelaPrincipal.java:75)
    at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)
    at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2346)
    at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
    at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
    at java.awt.Component.processMouseEvent(Component.java:6525)
    at javax.swing.JComponent.processMouseEvent(JComponent.java:3322)



  1. staroski
    Posts:4600


    Comment Arrow

    Publicado em: 13/07/2015 19:48:11

    Sensacional!!!

    Agora, é o seguinte, um Stack Trace possui basicamente seguinte formato:


    Então, no seu caso temos:


    O que significa o seguinte:

    Qual exceção ocorreu?
    java.lang.NullPointerException

    Em qual pacote e classe?
    visao.TelaPrincipal

    Em qual método?
    mostrarBanco

    Em qual arquivo?
    TelaPrincipal.java

    Em qual linha?
    linha número 24

    Agora é só você conferir a documentação do Java para aprender o que é um NullPointerException
    E depois verificar porque está acontecendo essa exceção na linha 24 do arquivo TelaPrincipal.java
    _________________

    Ricardo Artur Staroski, OCP-JP
    Blumenau - SC
    http://www.staroski.com.br

    Acesse http://www.guj.com.br/

  1. Comment Arrow

    Publicado em: 13/07/2015 21:13:13

    O erro está aqui:
    for (int i = 0; i < cliente.size(); i++) {

    provavelmente pelo erro que deu, o que está nulo é a variável <cliente> que é "List<Cliente> cliente;"

    Então teria algo de errado com o List<Cliente> :

    public List<Cliente> getLista() throws SQLException {
    String sql = "select * from cliente";
    PreparedStatement stmt = this.conexao.prepareStatement(sql);
    ResultSet rs = stmt.executeQuery();
    List<Cliente> minhaLista = new ArrayList<Cliente>();

    while (rs.next()) {
    Cliente c = new Cliente();
    c.setId(Integer.parseInt(rs.getString("id"));
    c.setNome(rs.getString("nome");
    c.setEndereco(rs.getString("endereco");
    c.setCidade(rs.getString("cidade");
    c.setBairro(rs.getString("bairro");
    c.setCpf(rs.getString("cpf");
    c.setTelefone(rs.getString("telefone");
    c.setEmail(rs.getString("email");
    c.setSexo(rs.getString("sexo");
    minhaLista.add(c);
    }
    rs.close();
    stmt.close();
    return minhaLista;
    }

    Eu acho que o erro deve ser provavelmente pq eu não soube chamar o select * from dentro do banco de dados. Alguém sabe como resolver?



  1. staroski
    Posts:4600


    Comment Arrow

    Publicado em: 14/07/2015 10:32:50

    [quote="lena.dracarys"]o que está nulo é a variável 'cliente' que é "List<Cliente> cliente;"


    Dúvida: porque sua lista de clientes se chama 'cliente'?
    É uma lista, pode haver vários clientes dentro dela, então o seu nome deveria ser 'clientes', no plural.

    Com certeza ela não foi inicializada, não tem nada a ver com o seu select.
    Posta o código completo pra gente ver a declaração e a inicialização dessa lista.


    _________________

    Ricardo Artur Staroski, OCP-JP
    Blumenau - SC
    http://www.staroski.com.br

    Acesse http://www.guj.com.br/

  1. Comment Arrow

    Publicado em: 14/07/2015 12:08:24

    package dao;

    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 java.util.logging.Logger;
    import modelo.Cliente;
    import modelo.CriaConexao;

    public class Banco {
    private Connection conexao;

    public Banco() throws Exception {
    this.conexao = CriaConexao.getConexao();
    }

    public List<Cliente> getLista() throws SQLException {
    String sql = "select * from cliente";
    PreparedStatement stmt = this.conexao.prepareStatement(sql);
    ResultSet rs = stmt.executeQuery();
    List<Cliente> minhaLista = new ArrayList<Cliente>();

    while (rs.next()) {
    Cliente c = new Cliente();
    c.setId(Integer.parseInt(rs.getString("id"));
    c.setNome(rs.getString("nome");
    c.setEndereco(rs.getString("endereco");
    c.setCidade(rs.getString("cidade");
    c.setBairro(rs.getString("bairro");
    c.setCpf(rs.getString("cpf");
    c.setTelefone(rs.getString("telefone");
    c.setEmail(rs.getString("email");
    c.setSexo(rs.getString("sexo");
    minhaLista.add(c);
    }
    rs.close();
    stmt.close();
    return minhaLista;
    }
    }
    --------------------------------------------------------------------------------------------------
    package modelo;

    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;

    public class CriaConexao {

    public Statement stm;
    public ResultSet rs;
    public Connection conn;

    public static Connection getConexao() throws SQLException {
    try {
    Class.forName("org.postgresql.Driver";
    System.out.println("Conectado ao banco";
    return DriverManager.getConnection("jdbc:postgresqlrojetoFinal", "postgres", "33560045";
    } catch (ClassNotFoundException e) {
    throw new SQLException(e.getMessage());
    }
    }



  1. staroski
    Posts:4600


    Comment Arrow

    Publicado em: 14/07/2015 13:48:45

    Seu erro está na linha 24 da classe TelaPrincipal
    Você postou algumas classes, exceto essa, que é justamente onde o NullPointer está acontecendo...

    _________________

    Ricardo Artur Staroski, OCP-JP
    Blumenau - SC
    http://www.staroski.com.br

    Acesse http://www.guj.com.br/

  1. Comment Arrow

    Publicado em: 14/07/2015 13:59:02

    Eu disse lá em cima: o erro ta aqui

    List < Cliente > cliente;


    private void mostrarBanco(List < Cliente > cliente) {
    try {
    while (tmCliente.getRowCount() > 0) {
    tmCliente.removeRow(0);
    }
    String[] linha = new String[] {null,null,null,null,null,null,null,null,null,null};
    for (int i = 0; i < cliente.size(); i++) { -------> linha q está dando erro
    tmCliente.addRow(linha);
    tmCliente.setValueAt(cliente.get(i).getId(), i, 0);
    tmCliente.setValueAt(cliente.get(i).getNome(), i, 1);
    tmCliente.setValueAt(cliente.get(i).getEndereco(), i, 2);
    tmCliente.setValueAt(cliente.get(i).getCidade(), i, 3);
    tmCliente.setValueAt(cliente.get(i).getBairro(), i, 4);
    tmCliente.setValueAt(cliente.get(i).getCpf(), i, 5);
    tmCliente.setValueAt(cliente.get(i).getRg(), i, 6);
    tmCliente.setValueAt(cliente.get(i).getTelefone(), i, 7);
    tmCliente.setValueAt(cliente.get(i).getEmail(), i, ;
    tmCliente.setValueAt(cliente.get(i).getSexo(), i, 9);
    }
    }catch (Exception e) {
    JOptionPane.showMessageDialog(null,"erro:" + e.getMessage());
    }
    }



  1. staroski
    Posts:4600


    Comment Arrow

    Publicado em: 15/07/2015 09:03:17

    [quote="lena.dracarys"]Eu disse lá em cima: o erro ta aqui
    List < Cliente > cliente;



    Com todo o respeito, lá em cima você disse:
    [quote="lena.dracarys"]
    o erro ta aqui
    for (int i = 0; i < cliente.size(); i++) {



    Eu pedi para que você postasse o código completo da sua classe, mas você não o fez, é difícil adivinhar como seu código está implementado.

    Pois bem, já sabemos que o parâmetro 'cliente' (que na verdade não é um cliente, mas uma lista com vários clientes) está vindo null

    Quem está chamando o método 'mostrarBanco' (que na verdade não mostra nenhum banco, ele popula um TableModel de forma ineficiente...) está passando null como parâmetro.

    Dica
    Procure utilizar nomes de classes, métodos e variáveis de acordo com o que realmente representam ou realizam.
    _________________

    Ricardo Artur Staroski, OCP-JP
    Blumenau - SC
    http://www.staroski.com.br

    Acesse http://www.guj.com.br/



  1. Relacionados