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”
Utilize camelCase e não _ nos nomes. O padrão java é utilizado assim e existem vários componentes que esperam esse padrão nas classes.
coloque ajax=false no seu botão.
Troque de actionListener para action.
F
fabiozanardi
O sql pode estar no modo case sensitive também, experimente remover a clausula where, e de um select *, veja se retorna alguma coisa
L
Luciano_Lopes
Alguem tem algum exemplo que possa postar?
F
fabiozanardi
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:
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:
publicList<Post>getLastPosts(intqtde)throwsDAOException{
List<Post>retorno=newArrayList<Post>();Connectioncon=null;PreparedStatementstm=null;ResultSetrs=null;try{
con=ConnectionGetter.getConnection();StringBuilderquery=newStringBuilder();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()){
Postpost=newPost();post.setId(rs.getInt("postid"));post.setConteudo(rs.getString("conteudo"));post.setTitulo(rs.getString("titulo"));post.setData(rs.getDate("postdata"));Usuariouser=newUsuario();user.setId(rs.getInt("idusuario"));user.setNome(rs.getString("nomeusuario"));post.setUsuario(user);retorno.add(post);}
}catch(Exceptionex){
thrownewDAOException(ex);}finally{
this.closeResources(rs,stm,con);}
returnretorno;}
L
Luciano_Lopes
Resolvi Era só probleminha na hora de executar o SQL mesmo, vlw
A
alfredosyncode
Luciano_Lopes tem como me mostrar como ficou o seu pra dar certo ?
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)
L
Luciano_Lopes
No teu caso ele realmente não encontrou o registro, tente usar like na pesquisa e rs.first() no lugar do rs.next()
A
alfredosyncode
opa, o nome procurado existe no banco, então vou tentar fazer essa mudança pra ver no que da.
valeu
A
alfredosyncode
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:
publicListbuscar(Stringusuario)throwsException{List<Usuario>list=newArrayList<Usuario>();PreparedStatementps=null;ResultSetrs=null;try{Stringsql=("select * from tab_usuario where usuario_usuario like '"+usuario+"'");ps=this.conn.prepareStatement(sql);rs=ps.executeQuery();rs.next();Integerid=rs.getInt("id_usuario");StringtempNome=rs.getString("usuario_usuario");Stringsenha=rs.getString("senha_usuario");list.add(newUsuario(id,tempNome,senha));}catch(SQLExceptionsqle){throwsqle;}finally{ConnectionFactory.closeConnection(this.conn,ps,rs);}returnlist;}
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 :(