Usando DAO para fazer pesquisas

Pessoal,

Estou usando o modelo DAO, e criei uma estrutura para conter vários métodos como lista todos, excluir, atualizar para uma classe
de agendamento. O Código abaixo implementa uma pesquisa, o nome do arquivo desse trecho de código é AgendamentoDAOImpl

public Agendamento pesquisar(String data) throws AgendamentoDAOException {
    	   
    	   PreparedStatement smt = null;
           ResultSet rs = null;
           
           String html = "";
           html += "<html>";
           html += "<body>";
           
           try{
            	smt = conn.prepareStatement("select * from agendamento where data like ?");
            	rs = smt.executeQuery();
            	while (rs.next()){
                    html += "Proprietario:" + rs.getString("propveiculo") + "<br/>";
                    html += "Data:" + rs.getString("data") + "<br/>";
                                        
                }
                rs.close();
                smt.close();
           } 
           catch( SQLException err ){
               throw new AgendamentoDAOException( err );
            }
            finally {
           	 ConnectionAgendamentoFactory.close( conn, smt, rs);
            }
    	   // TODO Auto-generated method stub
           return null;
       }

E já fiz algo semelhante para listar todos os agendamentos usando um jsp, e isso funcionou.

Agora com relação ao código acima, quando coloco a variavel data vem a mensagem

org.apache.jasper.JasperException: Unable to compile class for JSP:
An error occurred at line: 25 in the jsp file: /pesquisaAG.jsp data cannot be resolved

Mesmo tentando colocar a váriavel data entre aspas duplas vem a mensagem de erro:

An error occurred at line: 25 in the jsp file: /pesquisaAG.jsp
Type mismatch: cannot convert from Agendamento to List

O que eu pretendo fazer é uma busca através da Data e apresentar os dados,

Como fazer que o valor data seja reconhecido ?

Att,

Rodrigo Faria

olá rodrigo,

na liha referete a List<Agendamento> ag=dao.pesquisar(data);

Esse data na verdade aponta para uma variável de nome data que o método dao.pesquisa usa para efetuar a pesquisa e te retornar algo.

Só que vc não declarou essa variavel anteriormente.

por isso a mensagem: /pesquisaAG.jsp data cannot be resolved…

Esse recho de código está no servlet do form.

para essa finalidade vc precisa ter um servlet separado desse arquivo (View) do seu form.

Como vc está usando servlet. O idela é que vc

crie o Agendamento form para o usuario pesquisar e quando efetuar o post desse form no botão pesquisar esse form seja postado para um servlet(Controler) que vai acessar o seu dao.pesquisar(data) e te retornar uma lista com os resultados que vc obtiver no banco de dados de acordo com a pesquisa do usuario.

Com servlet vc não consegue ter isso no mesmo arquivo do form(View) a não ser que vc utilze Ajax tb é claro.

Essa implementação que vc está fazendo vc pode encontrar com detalhes na apostila gratuita da Caelum fj-21.

outra dica é que vc use StringBuilder ao invés de String no seu servlet, faça uma pequisa sobre isso e descobrirá o motivo.

Usar o for( Object:list) (“Chamado de for aprimorado”) tb é bem vindo no seu projeto vai te ajudar bastante…

Espero ter ajudado!
Abração

Oi Paulo,

Usando somente o Servlet (usando o GET parte HTML e parte de processamento com POST.
Criando dois JSP, um arquivo com formulário usando método POST apontando para uma segunda página JSP.
Dessas duas formas eu consigo fazer a pesquisa

Mas eu queria que isso fosse feito no modelo DAO, pois eu quero separar as regras de negócio com banco de dados.

Uso um arquivo como Interface.

import java.util.List;
import br.home.revisao.Agendamento;
public interface AgendamentoDAO {
   void atualizar( Agendamento agendamento )throws AgendamentoDAOException;
   void excluir( Agendamento agendamento )throws AgendamentoDAOException;
   void salvar( Agendamento agendamento )throws AgendamentoDAOException;
   List<Agendamento> listaTodos()throws AgendamentoDAOException;
   Agendamento pesquisar( String data )throws AgendamentoDAOException;
}

No arquivo abaixo em faço a implementação dos códigos.

 @Override
      public void atualizar(Agendamento agendamento) throws AgendamentoDAOException {
             // TODO Auto-generated method stub
      }
      @Override
      public void excluir(Agendamento agendamento) throws AgendamentoDAOException {
             // TODO Auto-generated method stub
      }
      @Override
      public List<Agendamento> listaTodos() throws AgendamentoDAOException {
             // TODO Auto-generated method stub
             PreparedStatement smt = null;
             ResultSet rs = null;
             try{
               smt = conn.prepareStatement("SELECT propveiculo, placa, data  FROM agendamento ORDER BY codigo;");
               rs = smt.executeQuery();
               List<Agendamento> list = new ArrayList<Agendamento>();
               while( rs.next() ){
                     
            	     String propveiculo = rs.getString( 1 ); 
                     String placa = rs.getString( 2 );
                     String data = rs.getString( 3 );
          
                     list.add( new Agendamento( propveiculo, placa, data ) );
        }

               return( list );
             }
             catch( SQLException err ){
                throw new AgendamentoDAOException( err );
             }
             finally {
            	 ConnectionAgendamentoFactory.close( conn, smt, rs);
             }
       }
       @Override
       public Agendamento pesquisar(String data) throws AgendamentoDAOException {
       // TODO Auto-generated method stub	   
    	  
       @Override
       public void salvar(Agendamento agendamento) throws AgendamentoDAOException {
             // TODO Auto-generated method stub
       }
     }

Depois crio um JSP para usar os metodos:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
      pageEncoding="ISO-8859-1"
      import="java.util.*"
      import="br.home.revisao.Agendamento"
      import="br.home.revisao.dao.AgendamentoDAO"
      import="br.home.revisao.dao.AgendamentoDAOImpl"
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
	<style type="text/css">
	body {background-color: #CCFFFF;} /*azul claro*/";
    </style>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Lista de todos agendamentos</title>
</head>
<body>
<%

AgendamentoDAO dao = new AgendamentoDAOImpl();
List<Agendamento> ag = dao.listaTodos();
for( Iterator<Agendamento> i = (ag.iterator() ); i.hasNext(); ){
	Agendamento agendamento = (Agendamento)i.next();
       out.println( "<b>Proprietario do veiculo:</b> " + agendamento.getPropveiculo() + "<br>");
       out.println( "<b>Placa:</b>" + agendamento.getPlaca() + "<br>");
       out.println( "<b>Data:</b> " + agendamento.getData() + "<br>");
  
}	  
 
%>

Depois vou dar uma lida nas dicas que você passou.

Como eu poderia implementar essa JSP segundo o padrão DAO ?

Att,

Rodrigo Faria