Duvida DAO

4 respostas
A

Pelo o que eu entendi a classe DAO nada mais seria que um classe que fizesse toda a parte de conexão com o banco de dados.

Gostaria de saber se o codigo abaixo poderia ser considerado como uma classe DAO:

import java.sql.*;
public class BD
{
    public static Connection connection = null;
    public static Statement statement = null;
    public static ResultSet resultSet = null;
    public static final String DRIVER   = "sun.jdbc.odbc.JdbcOdbcDriver";
    public static final String URL      = "jdbc:odbc:DRIVER={Microsoft Access Driver (*.mdb)};DBQ=c:/meubd/banco.mdb";
    /**
     * método que faz conexão com o banco de dados
     * retorna true se houve sucesso, ou false em caso negativo
     */
    public static boolean getConnection()
    {
       try
       {
   	      Class.forName(DRIVER);
          connection = DriverManager.getConnection(URL);
          statement = connection.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
          System.out.println("Conectou");
          return true;
       }
       catch(ClassNotFoundException erro)
       {
       	  erro.printStackTrace();
          return false;
       }
       catch(SQLException erro)
       {
       	  erro.printStackTrace();
          return false;
       }
    }

    /**
     * Fecha ResultSet, Statement e Connection
     */
    public static void close()
    {
	   closeResultSet();
	   closeStatement();
	   closeConnection();
	}

	private static void closeConnection()
	{
	   try
	   {
	      connection.close();
	      System.out.println("Desconectou");
	   }
	   catch(SQLException erro)
	   {
	      erro.printStackTrace();
	   }
	}

	private static void closeStatement()
	{
	   try
	   {
	      statement.close();
	   }
	   catch(Exception e)
	   {
          e.printStackTrace();
       }
	}

	private static void closeResultSet()
	{
	   try
	   {
	      resultSet.close();
	   }
	   catch(Exception e)
	   {
          e.printStackTrace();
	   }
	}

    /**
     * Carrega o resultSet com o resultado do script SQL
     */
    public static void setResultSet(String sql)
    {
	   try
	   {
		  resultSet = statement.executeQuery(sql);
	   }
       catch(SQLException erro)
       {
          erro.printStackTrace();
       }
    }

    /**
     * Executa um script SQL de atualização
     * retorna um valor inteiro contendo a quantidade de linhas afetadas
     */
    public static int runSQL(String sql)
    {
	   int quant = 0;
	   try
	   {
		  quant = statement.executeUpdate(sql);
	   }
	   catch(SQLException erro)
	   {
	   	  erro.printStackTrace();
	   }
       return quant;
	}
}

???

4 Respostas

Andre_Fonseca

oi,

Isso que você escreveu seria uma classe responsável por tratar com as conexões do BD: abrir, fechar, etc (muitas vezes chamada de fábrica de conexões)

Uma classe DAO é uma classe que "encapsula" a chamada ao banco de dados, ou seja, ao invés de fazer

insert into tbl_usuarios (nome, idade) values ('Andre', '35')

Utilizando o DAO você irá fazer algo como

Usuario andre = new Usuario();
andre.setNome("Andre");
andre.setIdade("35");

UsuarioDAO dao = new UsuarioDAO();
dao.insere(andre);

Existem diversos exemplos de código aqui no site, dê uma procurada na busca por DAO que irá encontrar vários tópicos

Além disso caso não conheça sugiro você a baixar a apostila da caelum que irá te ajudar a familiarizar com o DAO (entre outros conceitos)

abs

Luciano_Lopes

O DAO seria essa sua classe conexão ser chamada por outra classe e usada para fazer insert,update,etc como o colega citou ai em cima.

A

Entao esta poderia ser considerada:

// Fig. 25.31: DisplayQueryResults.java
// Exibe o conteúdo da tabela Authors no
// banco de dados Books.
import java.awt.BorderLayout;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.sql.SQLException;
import javax.swing.JFrame;
import javax.swing.JTextArea;
import javax.swing.JScrollPane;
import javax.swing.ScrollPaneConstants;
import javax.swing.JTable;
import javax.swing.JOptionPane;
import javax.swing.JButton;
import javax.swing.Box;

public class DisplayQueryResults extends JFrame 
{
   // driver JDBC e URL de banco de dados
   static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
   static final String DATABASE_URL = "jdbc:mysql://localhost/books";
   static final String USERNAME= "jhtp6";
   static final String PASSWORD= "jhtp6";
   
   // consulta padrão seleciona todas as linhas de tabela authors
   static final String DEFAULT_QUERY = "SELECT * FROM authors";
   
   private ResultSetTableModel tableModel;
   private JTextArea queryArea;
   
   // cria o ResultSetTableModel e GUI
   public DisplayQueryResults() 
   {   
      super( "Displaying Query Results" );
         
      // cria o ResultSetTableModel e exibe tabela de banco de dados
      try 
      {
         // cria o TableModel para resultados da consulta SELECT * FROM authors
         tableModel = new ResultSetTableModel( JDBC_DRIVER, DATABASE_URL,
            USERNAME, PASSWORD, DEFAULT_QUERY );                         

         // configura JTextArea em que o usuário digita consultas
         queryArea = new JTextArea( DEFAULT_QUERY, 3, 100 );
         queryArea.setWrapStyleWord( true );
         queryArea.setLineWrap( true );
         
         JScrollPane scrollPane = new JScrollPane( queryArea,
            ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED, 
            ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER );
         
         // configura o JButton para enviar consulta
         JButton submitButton = new JButton( "Submit Query" );

         // cria o Box para gerenciar o posicionamento da queryArea e do
         // submitButton na GUI
         Box box = Box.createHorizontalBox();
         box.add( scrollPane );
         box.add( submitButton );

         // cria o delegado JTable para tableModel
         JTable resultTable = new JTable( tableModel );
         
         // posiciona os componentes GUI no painel de conteúdo
         add( box, BorderLayout.NORTH );
         add( new JScrollPane( resultTable ), BorderLayout.CENTER );

         // cria evento ouvinte para submitButton
         submitButton.addActionListener( 
         
            new ActionListener() 
            {
               // passa consulta para modelo de tabela
               public void actionPerformed( ActionEvent event )
               {
                  // realiza uma nova consulta
                  try 
                  {
                     tableModel.setQuery( queryArea.getText() );
                  } // fim do try
                  catch ( SQLException sqlException ) 
                  {
                     JOptionPane.showMessageDialog( null, 
                        sqlException.getMessage(), "Database error", 
                        JOptionPane.ERROR_MESSAGE );
                     
                     // tenta recuperar a partir da consulta de usuário inválida
                     // executando consulta padrão
                     try 
                     {
                        tableModel.setQuery( DEFAULT_QUERY );
                        queryArea.setText( DEFAULT_QUERY );
                     } // fim do try
                     catch ( SQLException sqlException2 ) 
                     {
                        JOptionPane.showMessageDialog( null, 
                           sqlException2.getMessage(), "Database error", 
                           JOptionPane.ERROR_MESSAGE );
         
                        // assegura que a conexão de banco de dados está fechada
                        tableModel.disconnectFromDatabase();   
         
                        System.exit( 1 ); // termina o aplicativo
                     } // fim do catch interno
                  } // fim do catch externo
               } // fim do método actionPerformed
            } // fim da classe ActionListener interna 
         ); // fim da chamada para addActionListener

         setSize( 500, 250 ); // configura o tamanho da janela
         setVisible( true ); // exibe a janela 
      } // fim do try
      catch ( ClassNotFoundException classNotFound ) 
      {
         JOptionPane.showMessageDialog( null, 
            "MySQL driver not found", "Driver not found",
            JOptionPane.ERROR_MESSAGE );
         
         System.exit( 1 ); // termina o aplicativo
      } // fim do catch
      catch ( SQLException sqlException ) 
      {
         JOptionPane.showMessageDialog( null, sqlException.getMessage(), 
            "Database error", JOptionPane.ERROR_MESSAGE );
         
         // assegura que a conexão de banco de dados está fechada
         tableModel.disconnectFromDatabase();   
         
         System.exit( 1 );   // termina o aplicativo
      } // fim do catch
      
      // dispõe da janela quando o usuário fecha o aplicativo (isso sobrescreve
      // o padrão de HIDE_ON_CLOSE)
      setDefaultCloseOperation( DISPOSE_ON_CLOSE );
      
      // assegura que a conexão de banco de dados é fechada quando usuário fecha o aplicativo
      addWindowListener(
      
         new WindowAdapter() 
         {
            // desconecta-se do banco de dados e sai quando a janela for fechada
            public void windowClosed( WindowEvent event )              
            {                                                          
               tableModel.disconnectFromDatabase();                    
               System.exit( 0 );                                       
            } // fim do método windowClosed 
         } // fim da classe WindowAdapter interna 
      ); // fim da chamada a addWindowListener
   } // fim do construtor DisplayQueryResults
   
   // executa o aplicativo
   public static void main( String args[] ) 
   {
      new DisplayQueryResults();     
   } // fim de main
} // fim da classe DisplayQueryResults

Estou persistindo para poder para de misturar tudo e passar a usar uma boa pratica

Luciano_Lopes

Acho que ainda não, vou tentar te explicar melhor, você tem a classe que faz conexão com o banco, a classe model onde tem os campos da sua tabela, e a classe dao onde você vai pegar a classe da conexão+classe model,ou seja na sua classe dao vai ter insert,delete,update usandos os campos que você criou la na classe model, entendeu?Se sua classe tive essas caracteristicas então ela é dao.

Criado 22 de julho de 2011
Ultima resposta 22 de jul. de 2011
Respostas 4
Participantes 3