Utilizar DAO

E ae pessoal blz
A uns dias atraz fiz um post aqui no fórum informando que estava com problemas em conexão com banco de dados. Resolvi o problema com a ajuda de uns amigos aqui do fórum que me deram a maior força. Um desses amigos falou que o modo que eu estava trabalhando não era certo e que eu deveria usar DAO. Faz uns dias que não entro aqui e ntão resolvi abrir um novo post para esse assunto pois o outro ja tinha sido resolvido que era fazer a conexão. Sou estudante de java e estou iniciando na parte de banco de dados.
Eu fiz um form simples que tem 2 campos que são: nome e usuário!
Fiz uma class que faz a conexão com o banco de dados e outra que implementa a class que faz a conexão e executa os códigos sql fazendo consulta no banco de dados após ter o resultado envia a informação para uma JSP. O meu código funcionou, olhem como ele ficou:
Esse é o jsp com os campos:


<%@ page import="java.util.*" %>
<html>
<head>
	<style type="text/css">
		@import url("css/estilo_layout.css");
		@import url("css/estilo_textos.css");
	</style>
</head>
<body>

<div id="banner_cabecalho">
<%@ include file="includes/top.html" %>
</div>

<div id="corpo_inteiro">
	<form method="POST" action="Inter.do">
        <label for="txtusuario" class="usuario"><b class="campo1">usuário:</b></label>&nbsp;<input type="text" name="usuario" id="txtusuario" class="input-grande"  />
	<label for="txtsenha" class="senha"><b class="campo1">senha:</b></label>&nbsp;<input type="password" name="senha" id="txtsenha" class="password-senha" />
	<input type="submit" class="botao" value="Entrar"/>
        </form>
</div>

<div id="banner_rodape">
<%@ include file="includes/coluna_base.html" %>
</div>

</body>
</html>

Essa é a class de conexão:

/*
 * Conexao.java
 *
 * Created on 23 de Abril de 2007, 21:18
 */

package conexao;
import java.io.IOException;
 import java.sql.Connection;
 import java.sql.DriverManager;
 import java.sql.SQLException;

/**
 * @author alexandre
 * @version
 */
 public class Conexao {
 	
 	private static String NAME	= "com.mysql.jdbc.Driver";
 	private static String URL	= "jdbc:mysql://localhost/fidelity";
 	private static String LOGIN	= "root";
 	private static String PASS	= "";
 	
 	/**
 	 * 
 	 * @return Conexao.
 	 * @throws SQLException
 	 * @throws IOException
 	 */
 	public static Connection connect() throws SQLException, IOException {
 		
 		Connection con = null;
 		
 		try {
 			Class.forName(NAME);
 			con	= DriverManager.getConnection(URL, LOGIN, PASS);
 		} catch (ClassNotFoundException e) {
 			System.out.print("\nNão foi possível estabelecer conexão com a base de dados.\n");
 			e.printStackTrace();
 			return null;
 		}
 		return con;
 	}
 }

essa é a class que consulta o banco:

/*
 * Interpages.java
 *
 * Created on 30 de Abril de 2007, 18:48
 */

package validacao;

import java.io.*;
import java.net.*;
import java.util.*;

import javax.servlet.*;
import javax.servlet.http.*;
import java.io.IOException;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.ResultSet;

import conexao.Conexao;

/**
 *
 * @author alexandre
 * @version
 */
public class Interpages extends HttpServlet 
{
    
  
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException, SQLException 
    {
        String usuario_logado = null;
        String senha_logado = null;
        String nome_logado=null;
        
        String senha = request.getParameter("senha");
        String usuario = request.getParameter("usuario");
        
        Connection conn = Conexao.connect(); 
        
        Statement sql = conn.createStatement();
        
        String consulta = "select * from senhadeals where senha='"+senha+"' and usuario='"+usuario+"' limit 1";
        ResultSet rs = sql.executeQuery(consulta);
        
        
        
        while(rs.next())
        {
         
            usuario_logado = rs.getString("usuario");
            senha_logado = rs.getString("senha");
            nome_logado = rs.getString("nome");
           
        }
        
        request.setAttribute("logado", nome_logado);
        RequestDispatcher view = request.getRequestDispatcher("home.jsp");
        view.forward(request, response);
        
    }
    
    
}

E depois tem uma jsp simples que recebe o resultado e exibe para o usuário.
Eu estou usando o NetBeans para desenvolver
Porém eu gostaria de usar um DAO para fazer o trabalho com o sql! Alguém poderia me explicar como fazer isso. Não tenho idéia de como começar. Alguém poderia fazer um exemplo aqui para mim e me explicar por favor? Gostaria de aprender
Obrigado

Kra com relação ao DAO , não posso te ajudar muito, até pq acabei de postar um tópico com uma dúvida justamente nisso. Mas vendo teu código posso te dar algumas dicas.

Ao invés de usar uma simples Statement para executar tuas queries usa uma subinterface de Statement, chamada PreparedStatement associado a um arquivo de properties. Com isso vc simplesmente tira todo código SQL do teu código java e facilita monstruosamente a manuntenção das queries.

Ai vai alguns links pra te ajudar:

Meu post com os códigos:

http://www.guj.com.br/posts/list/59068.java#310331

Tutorial do GUJ sobre a classe Properties e manipulação de arquivos .properties

http://www.guj.com.br/java.tutorial.artigo.35.1.guj

Tutorial do GUJ sobre como tirar o SQL do teu código Java:

http://www.guj.com.br/java.tutorial.artigo.115.1.guj

Espero q te ajude. Se descobreres uma boa solução para o DAO me avisa :slight_smile:

E ae blz
Cara valeu pela dica eu vou estudar os links que vc passou

Se alguém puder me ensinar como criar esse código que criei postei acima usando DAO eu agradeço. Eu já peguei uma apostila de explicação sobre MVC e DAO, porém era só teoria agora preciso exemplo real, pode ser baseado no qu fiz acima

blz?

Na apostila F21 da caelum você tera uma boa explicação de DAO
http://www.caelum.com.br/caelum/apostila/caelum-java-web-fj21.pdf

la, você vai ver exemplos… e se ainda ficar duvida… tire aqui rs

espero ter ajudado.

[]´s

Geraldo

E ae pessoal blz

Eu estudei os links que os amigos deixaram, e estudei sobre MVC também no site da sun, entendi todos o conceito mas estou me perdendo um pouco e gostaria que vcs me ajudem a entender.
Vamos lá, a class de conexão ficou igual eu fiz da outra vez:

class de conexão:

/* 
 * Conexao.java 
 * 
 * Created on 23 de Abril de 2007, 21:18 
 */ 

package conexao; 
import java.io.IOException; 
 import java.sql.Connection; 
 import java.sql.DriverManager; 
 import java.sql.SQLException; 
  

 public class Conexao { 
     
    private static String NAME   = "com.mysql.jdbc.Driver"; 
    private static String URL   = "jdbc:mysql://localhost/test"; 
    private static String LOGIN   = "root"; 
    private static String PASS   = ""; 
     
    /** 
     * 
     * @return Conexao. 
     * @throws SQLException 
     * @throws IOException 
     */ 
    public static Connection connect() throws SQLException, IOException { 
        
       Connection con = null; 
        
       try { 
          Class.forName(NAME); 
          con   = DriverManager.getConnection(URL, LOGIN, PASS); 
       } catch (ClassNotFoundException e) { 
          System.out.print("\nNão foi possível estabelecer conexão com a base de dados.\n"); 
          e.printStackTrace(); 
          return null; 
       } 
       return con; 
    } 
 } 

Aí fiz uma class de interface de usuário, não sei se esse é o nome:
class de usuário:

 public class User 
{  
   private String usuario, senha;    
   // No que eu entendi aqui fica vazio sem sets ou gets   
} 

Aí depois eu crio uma interface para o DAO:

public interface UserDao 
{
   public void save (User user);
   public void delete (User user);
   public List list ();
   public User find (String name);  
} 

Eu criei essa interface dessa forma porque acredito que ela fica genérica para outras class que eu criar. Não sei se estou certo, porém se vcs puderem me explicar melhor a interface.

Agora é dessa parte que me perdi mais! Como usar o DAO com o JDBC? Criei a Interface do DAO que pode ser usada para Salvar, apagar dados ou jagar um consulta em uma lista ou fazer busca no banco com nome específico, mas não consegui conectar o DAO com o JDBC. Estou perto ou estou muito errado? Pelo que entendi se eu criar um DAO genérico é melhor que criar um específico, porque o genérico eu posso usar em várias situações, caso contrário vou ter que criar um DAO para cada situação!

Estou certo? Me explique por favor se estou errado e como faço para completar o programa, preciso aprender isso. A lógica entendo mas não estou conseguindo aplicar

Obrigado

Ea e pessoal blz

Bom eu consegui fazer um modelo aqui depois de muito trampo, mas deu certo vou postar o código aqui e por favor avaliem ele e me mostre onde eu devo melhorar e se montei certo, afinal esse é o primeiro não deve estar muito bom.

Essa é a jsp que o usuário preenche:

<%@page contentType="text/html"%>
<%@page pageEncoding="UTF-8"%>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>JSP Page</title>
    </head>
    <body>

    <h1>JSP Page</h1>
    <br/>
        
    <form method="POST" action="Inter.do">
        usuário: <input type="text" name="usuario"><br>
        senha: <input type="password" name="senha"><br>
        <input type="submit" value="Acessar">
    </form>
    
    </body>
</html>

Esse código recebe os dados enviados pelo usuário e envia para class de validação que retorna o valor para ele e se for aprovado é enviado para o DAO que esta com as query:

/*
 * Receptor_usuario.java
 *
 * Created on 22 de Maio de 2007, 21:18
 */

package receptores;

import java.io.*;
import java.net.*;

import javax.servlet.*;
import javax.servlet.http.*;

import Interfaces.Interface_usuario;
import DAO.DAO_usuario;

/**
 *
 * @author alexandre
 * @version
 */
public class Receptor_usuario extends HttpServlet 
{
    
    /** Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.
     * @param request servlet request
     * @param response servlet response
     */
    private int erro;
    
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException 
    {
       String usuario = request.getParameter("usuario");
       String senha = request.getParameter("senha");
       
       
       Interface_usuario validar = new Interface_usuario();
       
       //envia os valores para a interface usuário
       validar.getUsuario(usuario); 
       validar.getSenha(senha);
       
       //retorna a aprovação
       erro = validar.setErro();
       
       
       if(erro == 0)//caso erro tenha o valor 0 envia os dados para o DAO
       {
         DAO_usuario sql = new DAO_usuario();
         sql.DAO_dados(usuario,senha);
         
         String logado = sql.setLogado();
         
         request.setAttribute("logado", logado);
         RequestDispatcher view = request.getRequestDispatcher("resultado.jsp");
         view.forward(request, response);
         
       }
       else
       {
           //caso entre aqui é porque os valores não existem no banco
       }
    }
}

Essa é a class de validação:

/*
 * Interface_usuario.java
 *
 * Created on 22 de Maio de 2007, 21:23
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */

package Interfaces;

/**
 *
 * @author alexandre
 */
public class Interface_usuario 
{
    private int erro;
    /** Creates a new instance of Interface_usuario */
    public Interface_usuario() 
    {
        erro = 0;
    }
    
    public void getUsuario(String G_usuario)
    {
        //aqui faço as validações do campo usuário caso esteja errado erro recebe o valor 1
    }
    
    public void getSenha(String G_senha)
    {
        //aqui faço as validações do campo senha caso esteja errado erro recebe o valor 1
  
    }
    
    public int setErro()
    {
        return erro;
    }
}

Esse é o DAO com a query

/*
 * DAO_usuario.java
 *
 * Created on 22 de Maio de 2007, 21:44
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */

package DAO;

import java.io.*;
import java.net.*;
import java.util.*;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.ResultSet;

import conexao.Conexao;

/**
 *
 * @author alexandre
 */
public class DAO_usuario 
{
    
    public String usuario;
    public String senha;
    public String consulta;
    public String logado;
    
    public DAO_usuario() 
    {
        
    }
    
    public void DAO_dados(String getUsuario, String getSenha)
    {
       try 
        {
            Connection conn = Conexao.connect(); 
            Statement sql = conn.createStatement();
            
            usuario = getUsuario; 
            senha = getSenha;
       
            consulta = "select * from senhadeals where senha='"+senha+"' and usuario='"+usuario+"' limit 1  ";
       
            ResultSet rs = sql.executeQuery(consulta);
            
            while(rs.next())
            {
                logado = rs.getString("nome");
            }
        } 
        catch (IOException ex) 
        {
            ex.printStackTrace();
        }
        catch (SQLException ex) 
        {
            ex.printStackTrace();
        } 
        
        
       
    }
    
    public String setLogado()
    {
        return logado;
    }
    
    
}

Após o DAO fazer a consulta ele retorna o valor para a class que lhe enviou os dados no caso a class Receptor_usuario. E por sua vez finaliza o programa enviando o resultado para a página resultado.jsp.

Bom foi assim que criei, o q vcs acharam ficou bom? Devo melhorar alguma coisa?