Erro ao efetuar consulta no BD

13 respostas
Maureli

Estou recebendo um erro ao realizar a seguinte consulta:

public class JDBCConsultar {
     public Box consultar(Box box) {
        Connection consultar = PostgreSQL.getConnection();
           try{
            String sql = "Select * from box,cliente,endereco where id_box = ?";
            PreparedStatement stmt = consultar.prepareStatement(sql);
            stmt.setInt(1, box.getId());

            ResultSet rs =  stmt.executeQuery();
           
            if(rs.next()){
  

            Box box1 = new Box();
            box1.setId(rs.getInt("id_box"));
            box1.setNumero(rs.getInt("numero"));
            box1.setVago(rs.getBoolean("vago"));
            box1.getCliente().setId(rs.getInt("id_cliente"));// O erro ocorre nessa linha, "ERRO AO CONSULTAR BOX = NULL"
            box1.getCliente().setNome(rs.getString("nome"));
            box1.getCliente().setCpf(rs.getLong("cpf"));
            box1.getCliente().getEndereco().setId(rs.getInt("id_endereco"));
            box1.getCliente().getEndereco().setNumero(rs.getInt("numero"));
            box1.getCliente().getEndereco().setRua(rs.getString("rua"));
            box1.getCliente().getEndereco().setComplemento(rs.getString("complemento"));

             

            return box1;


               }
       
        }catch(Exception e){
           JOptionPane.showMessageDialog(null, "erro ao Consultar Box = " + e.getMessage());

        }
    finally {
            try {
                consultar.close();
            } catch (SQLException ex) {
                Logger.getLogger(JDBCCriarTabela.class.getName()).log(Level.SEVERE, null, ex);
            }

        }
return null;
  
}
}

Oque pode estar acontecendo?

Obrigado

13 Respostas

pmlm

box1.getCliente() é null. Tens de fazer primeiro box1.setCliente(new Cliente())

Maureli

Fiz assim mas não funciona.

box1.setCliente(new Cliente().setId(rs.getInt("cliente_id")));

:shock:

iogui

Crie o Cliente por fora e vá setando os valores dele. Depois que o cliente estiver todo preenchido, coloque ele no box.

Cliente cliente = new Cliente();
cliente.setXxxx(...)
...
box1.setCliente(cliente);

Faça uma coisa de cada vez, ok?

Outra dica. Enquanto estiver dando erro, printe o stacktrace completo no console pra ficar mais fácil de saber o que acontece:

}catch(Exception e){  
            JOptionPane.showMessageDialog(null, "erro ao Consultar Box = " + e.getMessage());  
        e.printStackTrace();
}

[]s

Maureli

O erro continua.

public class JDBCConsultar {
     public Box consultar(Integer box) {
        Connection consultar = PostgreSQL.getConnection();
        Cliente cliente = new Cliente();
        Endereco endereco = new Endereco();
        Box box1 = new Box();
           try{
            String sql = "Select * from box,cliente,endereco where id_box = ?";
            PreparedStatement stmt = consultar.prepareStatement(sql);
            stmt.setInt(1, box.intValue());

            ResultSet rs =  stmt.executeQuery();
           
            if(rs.next()){

            cliente.setId(rs.getInt("cliente_id"));
            cliente.setNome(rs.getString("nome"));
            cliente.setCpf(rs.getLong("cpf"));

            endereco.setId(rs.getInt("id_endereco"));
            endereco.setNumero(rs.getInt("numero"));
            endereco.setRua(rs.getString("rua"));
            endereco.setComplemento(rs.getString("complemento"));
            cliente.setEndereco(endereco);


            box1.setId(rs.getInt("id_box"));
            box1.setNumero(rs.getInt("numero"));
            box1.setVago(rs.getBoolean("vago"));
            box1.setCliente(cliente);
//
//                       

            return box1;


               }
       
        }catch(Exception e){
           JOptionPane.showMessageDialog(null, "erro ao Consultar Box" + e.getMessage());
            e.printStackTrace();
        }
    finally {
            try {
                consultar.close();
            } catch (SQLException ex) {
                Logger.getLogger(JDBCCriarTabela.class.getName()).log(Level.SEVERE, null, ex);
            }

        }
return null;
  
}
}

PrintSteckTrace

org.postgresql.util.PSQLException: [color=red]A nome da coluna cliente_id não foi encontrado neste ResultSet.[/color]
at org.postgresql.jdbc2.AbstractJdbc2ResultSet.findColumn(AbstractJdbc2ResultSet.java:2502)
at org.postgresql.jdbc2.AbstractJdbc2ResultSet.getInt(AbstractJdbc2ResultSet.java:2366)

G

tem certeza que o nome a columa é cliente_id ?
dá uma conferida no nome das colunas.

o site

http://www.tiacademicoweb.xpg.com.br/

pode lhe ser útil

Maureli

Erros básicos de principiante. desculpem por perguntas idiotas.

Obrigado a todos.

id_cliente: -correto
cliente_id: -errado :oops:

Maureli

Bom agora eu consigo salvar e excluir do banco tranquilo.

Meu problema está sendo em exibir minha consulta.

aqui esta dando um nullpointer

public void consultar(){ //esse método eu uso para chamer a consulta 
           Box box = new Box();
           Cliente cliente = new Cliente();

        int ex = Integer.parseInt(JOptionPane.showInputDialog("Digite o número do box do cliente que voçe deseja Consultar"));
        box.setId(ex);

        JDBCConsultar consulta = new JDBCConsultar();

        Box b = consulta.consultar(box); // aqui eu passo a id para ser consultada


        JOptionPane.showMessageDialog(null, "O box "+ b.getNumero()  +" a consulta foi realizada com sucesso");

        JOptionPane.showMessageDialog(null, "O box "+  b.getCliente().getNome() + b.getCliente().getEndereco().getRua() + " a consulta foi realizada com sucesso");
Maureli

O resultado da consulta não está correto

Nessa classe eu faço as consultas

public class JDBCConsultar {
     public Box consultar(Box box) {
        Connection consultar = PostgreSQL.getConnection();
        Cliente cliente = new Cliente();
        Endereco endereco = new Endereco();
        Box box1 = new Box();
           try{
            String sql = "Select * from box,cliente,endereco where id_box = ?";
            PreparedStatement stmt = consultar.prepareStatement(sql);
            stmt.setInt(1, box.getId());

            ResultSet rs =  stmt.executeQuery();
           
            if(rs.next()){

            cliente.setId(rs.getInt("id_cliente"));
            cliente.setNome(rs.getString("nome"));
            cliente.setCpf(rs.getLong("cpf"));

            endereco.setId(rs.getInt("id_endereco"));
            endereco.setNumero(rs.getInt("numero"));
            endereco.setRua(rs.getString("rua"));
            endereco.setComplemento(rs.getString("complemento"));
            cliente.setEndereco(endereco);


            box1.setId(rs.getInt("id_box"));
            box1.setNumero(rs.getInt("numero"));
            box1.setVago(rs.getBoolean("vago"));
            box1.setCliente(cliente);
                      
 
            return box1;

               }
           
       
        }catch(Exception e){
           JOptionPane.showMessageDialog(null, "erro ao Consultar Box" + e.getMessage());
            e.printStackTrace();
        }
    finally {
            try {
                consultar.close();
            } catch (SQLException ex) {
                Logger.getLogger(JDBCCriarTabela.class.getName()).log(Level.SEVERE, null, ex);
            }

        }
return null;
  
}
}

Aqui eu insiro a ID que eu quero consultar, e depois imprimo o valor;

public void consultar(){
           Box box = new Box();
           Box box1 = new Box();
           //Cliente cliente = new Cliente();

        int ex = Integer.parseInt(JOptionPane.showInputDialog("Digite o número do box do cliente que voçe deseja Consultar"));
        box.setId(ex);

        JDBCConsultar consulta = new JDBCConsultar();

        consulta.consultar(box);


     System.out.print(box1.getId() + box1.getNumero());
    }

Eu tenho 02 cadastros no banco.

- id = 1 / nome = Daiane
- id = 2 / nome = João

Quando insiro o ID 1 para consulta o resultado é correto = [color=green]1 Daiane[/color]
Mas quando insito o ID 2 para consulta o resultado é = [color=green]2 Daiane[/color], mas o correto seria - 2 João

não sei onde pode estar o erro.

obrigado.

iogui

Este seu código não faz sentido. Onde você está pegando o retorno do método consultar? Não deveria ser assim?:

Box boxRetornado = consulta.consultar(box);

E por que vc está somando o id com o número?

Maureli

Continua o mesmo erro.

Eu tenho 02 cadastros no banco.

- id = 1 / nome = Daiane
- id = 2 / nome = João

Quando insiro o ID 1 para consulta o resultado é correto = 1 Daiane
Mas quando insito o ID 2 para consulta o resultado é = 2 Daiane, mas o correto seria - 2 João

não sei onde pode estar o erro.
public void consultar(){
           Box box = new Box();
           Box box1 = new Box();
           //Cliente cliente = new Cliente();

        int ex = Integer.parseInt(JOptionPane.showInputDialog("Digite o número do box do cliente que voçe deseja Consultar"));
        box.setId(ex);

        JDBCConsultar consulta = new JDBCConsultar();

        box1 = consulta.consultar(box);


     System.out.print(box1.getId()+" "+ box1.getCliente().getNome());
    }
iogui

Sugestão:
Coloque um breakpoint na linha 08 da classe JDBCConsultar e faça um debug analisando os valores nas variáveis a cada passo.
É mais fácil vc descobrir o erro fazendo isto, do que nós aqui apenas olhando para o seu código.

[]s

Maureli

consegui resolver o problema, fiz as sequintes alteraçoes:

public Box consultar(Box box, Cliente cli) {// Adicionei um parametro do tipo Cliente

String sql = "Select * from box,cliente,endereco where id_box = ? and id_cliente = ?";//Adicionei o ID do cliente na minha consulta PreparedStatement stmt = consultar.prepareStatement(sql); stmt.setInt(1, box.getId()); stmt.setInt(2, cli.getId());

Não era bem o que eu queria mas funcionou.

Na verdade eu gostaria de passar apenas o ID do box, infelizmente não consegui obter resultado.

pmlm

Obter dados de três tabelas sem indicar as relações entre elas é sinal que algo estará errado.

Criado 12 de fevereiro de 2011
Ultima resposta 14 de fev. de 2011
Respostas 13
Participantes 4