Problema com INNER JOIN na minha aplicação[RESOLVIDO]

olá pessoal, estou desenvolvendo uma aplicação simples, com um banco de dados que possui 3 tabelas apenas.

Uma tabela Contato que possui

idcontato
nome
idade
datanasc
idcategoria

Categoria

idcategoria
descricao

Detalhes

iddetalhes
idcontato
idcategoria
observacoes

Quero fazer um Inner join para que eu consiga mostrar o nome, idade do contato, categoria e observacoes sobre este contato… no inicio, tentei fazer so com nome, categoria e observacoes… mas nem assim consegui… sei o que está no comando sql, olhem como está:

   public List<Contato> pesquisarComInnerJoin(String descricao) throws ClassNotFoundException, SQLException{
      List<Contato> contatos = new LinkedList<Contato>();
      String sql = "SELECT c.idcontato, cat.descricao, d.observacoes FROM contato as c inner join categoria as cat on c.idcategoria = cat.idcategoria inner join Detalhes as d on c.idcontato = d.idcontato where c.nome=?";
      PreparedStatement ps = getPreparedStatement(sql);
      ps.setString(1, descricao);
      ResultSet rs = ps.executeQuery();
      while(rs.next()){
           Contato contato = new Contato(); 
          contato.setIdContato(rs.getInt("idcontato"));
          contato.setNome(rs.getString("nome"));
          contato.setIdContato(rs.getInt("idcontato"));
          contato.setNome(rs.getString("nome"));
          contato.setIdade(rs.getInt("idade"));
          contato.setDatanasc(rs.getDate("datanasc"));
          contato.setIdcategoria(rs.getInt("idcategoria"));
          contatos.add(contato);
      }
      rs.close();
      ps.close();
      return contatos;
    }
}

Se eu tirar o WHERE, funciona… mas preciso que o usuário digite um noome ou o ID do contato para CONSULTAR, no meu caso, se eu tirar o where, ele executa de forma com que o usuario nao digite nada… funciona, mas quero que ele informe o contato que quer pesquisar…
vlw gente

Não entendi as suas relações. Qual é a cardinalidade entres elas ??

Contato relaciona com Categoria.
Detalhes relaciona com Categoria e Contato ?

usa like pra pesquisar strings, ex:

where nome like ‘mauricio’

em vez de

where nome = ‘mauricio’

Categoria relaciona com Contato. O Contato tem a chave estrangeira de Categoria.
Detalhes relaciona com categoria e contato.

“não funciona” = não vem nenhum registro? Experimentou verificar no banco como o nome do contato está cadastrado (considerando maiusculas/minusculas) ? Fez a pesquisa usando esta consideração?
Um último detalhe: está passando para o comando o conteudo de uma variável chamada “descricao” (que é o nome de um campo da tabela Categoria) Se quer pesquisar o contato pelo nome, tem certeza de que nesta variável está sendo passado um nome de contato?

Como a tabela detalhes tem referência com todas as outras tabelas faça o select a partir dela unindo contato e categoria, faça um teste da forma que esta aqui:

StringBuffer sql = new StringBuffer(); sql.append("SELECT d.idcontato, "); sql.append(" c.nome, "); sql.append(" cat.descricao, "); sql.append(" d.observacoes "); sql.append("FROM detalhe d"); sql.append(" INNER JOIN contato c "); sql.append(" ON c.idcontato = d.idcontato "); sql.append(" INNER JOIN categoria AS cat "); sql.append(" ON cat.idcategoria = c.idcategoria "); sql.append("WHERE c.nome like '%").append(name).append("%'");

ederfreitas, obrigado. Consegui resolver com sua solução, deu certinho! vlw!!!

Que bom que deu certo amigo =)

Só edite o título do tópico acrescentando [RESOLVIDO]

Abçs.