1. java
  2. android
  3. c#
  4. .net
  5. javascript
  6. php
  7. jquery
  8. html
  9. sql

Dúvida sobre métodos da Classe Dao

Tenho as seguintes alternativas:

ALTERNATIVA 1

public class VendaDao //Partes do código foram ocultadas para melhor clareza do mesmo.
{
private final Connection c;

    public VendaDao() 
    {
    this.c=ConnectionFactory.openConnection();
    }

    public void adicionaVenda(Venda v) 
    {
      try 
      {
      PreparedStatement stmt=this.c.prepareStatement("select cd_forma_pagamento "
      +"from forma_pagamento where lower(nm_forma_pagamento)=lower(?)");
      stmt.setString(1, v.getForma().getNomeForma());
      ResultSet rs=stmt.executeQuery();
        while(rs.next())
        {
        cdFormaPagamento=rs.getInt("cd_forma_pagamento");
        }
      //...
      stmt=this.c.prepareStatement("insert into venda...");
      stmt.setInt(1,cdFormaPagamento);
      //...
      stmt.executeUpdate();
      this.c.commit();
      stmt.close();
      rs.close();
      }
      catch (SQLException ex) 
      {
      System.out.println("Erro adicionaVenda: "+ex.getMessage());
        try 
        {
        this.c.rollback();
        }
        catch (SQLException e) 
        {
        }
      }
    }

ALTERNATIVA 2

public class FormaPagamentoDao
{
private final Connection c;

    public FormaPagamentoDao() 
    {
    this.c=ConnectionFactory.openConnection();
    }

    public int pesquisaChavePrimaria(FormaPagamento f) 
    {
      try 
      {
      PreparedStatement stmt=this.c.prepareStatement("select cd_forma_pagamento "
      +"from forma_pagamento where lower(nm_forma_pagamento)=lower(?)");
      stmt.setString(1, v.getForma().getNomeForma());
      ResultSet rs=stmt.executeQuery();
        while(rs.next())
        {
        cdFormaPagamento=rs.getInt("cd_forma_pagamento");
        }
      stmt.close();
      rs.close();
      }
      catch (SQLException ex) 
      {
      System.out.println("Erro: "+ex.getMessage());
        try 
        {
        this.c.rollback();
        }
        catch (SQLException e) 
        {
        }
      }
    return cdFormaPagamento;
    }

No método adicionaVenda da classe VendaDao, preciso achar a chave primária da tabela FORMA_PAGAMENTO. O correto seria no próprio método adicionaVenda eu fazer esta pesquisa, ou eu colocar esta pesquisa pronta num hipotético FormaPagamentoDao ? A segunda maneira parece ser mais organizada, mas ao instanciar VendaDao, eu já abri uma conexão no construtor, e ao instanciar FormaPagamentoDao no adicionaVenda, vou abrir outra conexão na mesma pesquisa. Qual das duas formas é a mais correta ?

  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do GUJ!

1 resposta

Não é a resposta que estava procurando? Procure outras perguntas com as tags java arquitetura ou faça a sua própria pergunta.