Erro ao efetuar consulta no BD

Estou recebendo um erro ao realizar a seguinte consulta:

[code]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;

}
}[/code]

Oque pode estar acontecendo?

Obrigado

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

Fiz assim mas não funciona.

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

:shock:

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

O erro continua.

[code]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;

}
}[/code]

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)

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

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

Obrigado a todos.

id_cliente: -correto
cliente_id: -errado :oops:

Bom agora eu consigo salvar e excluir do banco tranquilo.

Meu problema está sendo em exibir minha consulta.

aqui esta dando um nullpointer

[code] 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");[/code]

O resultado da consulta não está correto

Nessa classe eu faço as consultas

[code]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;

}
}[/code]

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

[code] 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());
}[/code]

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.

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?

Continua o mesmo erro.

[quote]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. [/quote]

[code]
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());
}[/code]

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

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.

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