Pessoal,estou tentando fazer uma consulta simples na minha pagina, tenho um inputtext onde digito a palavra que desejo e clico em um botão para realizar a pesquisa, o problema e que a consulta esta retornando null mas o registro que estou pesquisando existe no banco, meu código esta da seguinte forma:
Dao:
public Categorias pesquisar(String nome){
Categorias categoria = new Categorias();
Conexao conn = new Conexao();
try{
Statement stmt = (Statement) conn.getConn().createStatement();
ResultSet rs = stmt.executeQuery("select * from categorias where nome like '%"+nome+"%' ");
rs.next();
categoria.setCodigo(rs.getLong("codigo"));
categoria.setNome(rs.getString("nome"));
}
catch(Exception e){
e.printStackTrace();
}
return categoria;
}
Bean:
public void pesquisar(){
CategoriasDAO categoriadao=new CategoriasDAO();
categoria=categoriadao.pesquisar(pesquisa_categoria.getPesquisar_nome());
}
Obs: o “categoria” e “pesquisa_categoria” são do mesmo tipo, eu quero que o “categoria” receba o valor da consulta do “pesquisa_categoria”
minha pagina ta assim:
<p:inputText value="#{categoriasBean.pesquisa_categoria.pesquisar_nome}"/><p:commandButton value="Pesquisar" actionListener="#{categoriasBean.pesquisar}"/>
O sql pode estar no modo case sensitive também, experimente remover a clausula where, e de um select *, veja se retorna alguma coisa
Alguem tem algum exemplo que possa postar?
Ae, eu utilizo hibernate com a Criteria API e metamodels, vou ver se acho um exemplo com dao básico via jdbc e posto depois, segue abaixo no modelo do hibernate:
public List<Produto> pesquisarProduto(Map<String, Object> args) {
try {
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Produto> cq = cb.createQuery(Produto.class);
Root<Produto> produto = cq.from(Produto.class);
Predicate restrictions = cb.conjunction();
restrictions = cb.and(restrictions, cb.equal(produto.get(Produto_.excluido), false));
for (Map.Entry<String, Object> entry : args.entrySet()) {
String att = entry.getKey();
Object value = entry.getValue();
if (att == "produto" && !value.equals(null)) {
restrictions = cb.and(restrictions, cb.like(cb.lower(produto.get(Produto_.produto)),
"%" + ((String) value).toLowerCase() + "%"));
}
if (att == "tipo" && !value.equals(null)) {
restrictions = cb.and(restrictions, cb.equal(produto.get(Produto_.tipo), (TipoProduto) value));
}
}
cq.where(restrictions);
cq.orderBy(cb.asc(produto.get(Produto_.produto)));
TypedQuery<Produto> query = em.createQuery(cq);
query.setHint("org.hibernate.cacheable", true);
produtos = query.getResultList();
} catch (Exception e) {
e.printStackTrace();
}
return produtos;
}
Tem esse outro exemplo que fiz em 1 curso utilizando apenas jdbc, a ideia é pegar a quantidade de posts passados pelo parametro qtde de um determinado usuario em um blog
veja se ajuda:
public List<Post> getLastPosts(int qtde) throws DAOException {
List<Post> retorno = new ArrayList<Post>();
Connection con = null;
PreparedStatement stm = null;
ResultSet rs = null;
try {
con = ConnectionGetter.getConnection();
StringBuilder query = new StringBuilder();
query.append("SELECT post.id postid, post.conteudo conteudo, post.titulo titulo, post.data postdata, ");
query.append("usu.nome nomeusuario, usu.id idusuario ");
query.append("FROM Post post ");
query.append("JOIN Usuario usu ON (post.idusuario = usu.id) ");
query.append("ORDER BY postdata DESC ");
query.append("LIMIT ?");
stm = con.prepareStatement(query.toString());
stm.setInt(1, qtde);
rs = stm.executeQuery();
while (rs.next()) {
Post post = new Post();
post.setId(rs.getInt("postid"));
post.setConteudo(rs.getString("conteudo"));
post.setTitulo(rs.getString("titulo"));
post.setData(rs.getDate("postdata"));
Usuario user = new Usuario();
user.setId(rs.getInt("idusuario"));
user.setNome(rs.getString("nomeusuario"));
post.setUsuario(user);
retorno.add(post);
}
} catch (Exception ex) {
throw new DAOException(ex);
} finally {
this.closeResources(rs, stm, con);
}
return retorno;
}
Resolvi
Era só probleminha na hora de executar o SQL mesmo, vlw
Luciano_Lopes tem como me mostrar como ficou o seu pra dar certo ?
veja meu Dao
[code]public Usuario buscar(String nome) throws Exception {
Usuario usuario = new Usuario();
PreparedStatement ps = null;
ResultSet rs = null;
try {
String sql = ("select * from tab_usuario where usuario_usuario = '%" + nome + "%'");
ps = this.conn.prepareStatement(sql);
rs = ps.executeQuery();
rs.next();
usuario.setNome(rs.getString("usuario_usuario"));
}
catch (SQLException sqle) {
throw sqle;
} finally {
ConnectionFactory.closeConnection(this.conn, ps, rs);
}
return usuario;
}[/code]
ou caso alguem possa me ajudar.
erro: javax.servlet.ServletException: org.postgresql.util.PSQLException: ResultSet não está posicionado corretamente, talvez você precise chamar next.
javax.faces.webapp.FacesServlet.service(FacesServlet.java:606)
No teu caso ele realmente não encontrou o registro, tente usar like na pesquisa e rs.first() no lugar do rs.next()
opa, o nome procurado existe no banco, então vou tentar fazer essa mudança pra ver no que da.
valeu
[b]Falta pouco 
O meu método buscar() que fica no DAO funcionou, ele povoa uma lista com todos os dados do usuário que passei através de uma string
vejam:[/b]
[code]public List buscar(String usuario) throws Exception {
List list = new ArrayList();
PreparedStatement ps = null;
ResultSet rs = null;
try {
String sql = ("select * from tab_usuario where usuario_usuario like '"
+ usuario + "'");
ps = this.conn.prepareStatement(sql);
rs = ps.executeQuery();
rs.next();
Integer id = rs.getInt("id_usuario");
String tempNome = rs.getString("usuario_usuario");
String senha = rs.getString("senha_usuario");
list.add(new Usuario(id, tempNome, senha));
}
catch (SQLException sqle) {
throw sqle;
} finally {
ConnectionFactory.closeConnection(this.conn, ps, rs);
}
return list;
}[/code]
A questão agora é: no meu bean eu terei que capturar essa lista usando DataModel ??
estou fazendo assim no bean mas esta capturando apenas o getNome 
[code]
public String pesquisar() throws Exception {
UsuarioDAO buscardao = new UsuarioDAO();
buscardao.buscar(objUsuario.getNome());
return “/usuariolocalizado”;
}[/code]