Loading ...
Sorry, an error occurred while loading the content.

20115Re: [riojug] Deixando um pouco de trabalho para o banco de dados

Expand Messages
  • Renato Pinheiro de Souza
    Feb 27, 2008
    • 0 Attachment
      Não prestei atenção, vou testar com a SQLIntegrityConstraintViolationException e dou notícias.

      Em tempo, enviei a mensagem a muito tempo, não sei porque só chegou agora.

      Att.,
      Renato

      Bruno Luiz Pereira da Silva escreveu:

      Opa, o que eu tinha sugerido é que você troque o catch(MySQLIntegrit yConstraintViola tionException) por:
      catch (SQLIntegrityConstr aintViolationExc eption).

      Esta exception foi introduzida no Java 6, com a versão 4 do jdbc. Caso você tenha liberdade de usar Java 6 e um driver jdbc que suporte jdbc 4, você pode utilizar este catch. Ele te daria o mesmo recurso que vc tem ao usar a Exception específica do MySQL, mas sem te amarrar ao MySQL.

      Você já tentou usar essa SQLIntegrityConstra intViolationExce ption? Pela sua mensagem eu não entendi bem se você tinha tentado usar essa do Java 6 ou apenas a específica do MySQL. Se já usou a do Java 6, depois comenta os resultados então.

       --
      Atenciosamente,

      Bruno Luiz Pereira da Silva
      blpsilva@gmail. com
      http://brunopereira .com.br

      2008/2/10 Renato Pinheiro de Souza <renato.pinheiro@ pobox.com>:

      Oi Bruno,

      foi exatamente essa exceção que utilizei, o código ficou assim:

              try{
                  lutadorDAO.update(
                          new Lutador( id, nome, equipeDAO.buscaEqui pe(idEquipe) ,
                          graduacao, gub, peso, idade, documento, email, sexo));
              } catch (MySQLIntegrityCons traintViolationE xception ex) {
                  throw new LutadorDadoIncorret o("Já existe um lutador com " +
                          "este documento no banco de dados");
              }

      Pelo que li, poderia inclusive passar a MySQLIntegrityConst raintViolationEx ception como causa (está correto?) mas, pelo menos a princípio, não achei necessário.

      Testei o funcionamento, quando tento qualquer operação que viole as regras de integridade do banco, esta exceção é lançada.

      Valeu a ajuda Bruno.

      []s,
      Renato


      Bruno Luiz Pereira da Silva escreveu:

      Renato, o que você fez realmente te poupa um bom trabalho, e especialmente um trabalho bem chato se vc está usando jdbc diretamente para fazer o acesso ao banco de dados.
      Entretanto, o que o Guilherme falou é verdade, esse acoplamento fica muito forte e te impede de reaproveitar a abordagem em outro banco de dados.
      Uma solução que te permite deixar o controle de restrições de integridade para o banco sem te acoplar a um banco de dados específico é utilizar o controle de restrições de integridade da API jdbc.

      Na versão 4 da API jdbc (disponível a partir do Java 6) temos uma exceção chamada SQLIntegrityConstra intViolationExce ption. Se você puder usar Java 6 na sua aplicação e tiver um driver jdbc suportando jdbc 4.0, você consegue ter o controle de restrições de integridade feito pelo banco de dados sem te acoplar a um banco específico.

      Eu estou te falando isso apenas pelo conhecimento do recurso e da API, mas nunca cheguei a usar este recurso ainda. Acredito que os drivers da maioria dos bancos de dados mais comuns suporte isso bem, então é muito válido vc tentar trocar essa sua abordagem da exception específica do MySQL pela exception da API jdbc.

      Se você conseguir testar isso, responda novamente aqui para que possamos saber sobre o funcionamento deste novo controle da API. O jdbc 4.0 trouxe algumas exceptions mais específicas do que SQLException, mas todas herdam de SQLException. É sempre bom conhecermos estes novos recursos para nos livrar de coisas como controle de restrições de integridade em código Java, o que é muito chato.

      Espero ter ajudado.

      --
      Atenciosamente,

      Bruno Luiz Pereira da Silva
      blpsilva@gmail. com
      http://brunopereira .com.br

      2008/2/10 Guilherme Chapiewski <guilherme.chapiewsk i@...>:

      O que você fez foi criar um alto acoplamento entre a sua aplicação e o banco de dados. Sua aplicação agora nunca mais vai poder trocar de banco de dados sem um refactoring gigantesco!

      É uma boa prática não acoplar sua aplicação a nenhuma implementação de banco de dados específica.

      Aí alguém pode falar: mas eu nunca ví uma aplicação trocar de banco de dados. E é verdade. Eu só ví uma vez. Mas a questão é que o esforço para desenvolver com e sem esse acoplamento é praticamente o mesmo, então acredito que valha a pena fazer da forma correta.

      [ ]s, gc

      --
      Guilherme Chapiewski
      http://gc.blog. br


      Em 08/02/08, Renato Pinheiro de Souza <renato.pinheiro@ pobox.com> escreveu:

      Oi Pessoal,

      em minhas aplicações, eu controlo a inclusão, alteração etc. no banco de dados. Por exemplo, se for incluir um registro eu verifico, usando o java, se não viola alguma regra.

      Recentemente, eu deixei esse trabalho para o banco de dados capturando, por exemplo, MySQLIntegrityConst raintViolationEx ception na camada de controle e repassando como causa dentro de uma exceção que criei.

      Essa abordagem está correta? O código ficou muito mais limpo mas com isto eu transferi para o banco de dados um pouco da responsabilidade pela aplicação.

      Atenciosamente,
      Renato Pinheiro
      www.gpi.ufrj. br



      -=-=-=-=-=-= -=-=-=-=- =-=-=-=-= -=-=-=-=- =-=-
      Rio Java Users Group: http://www.riojug. org
      Moderadores: riojug-owner@ yahoogroups. com
      -=-=-=-=-=-= -=-=-=-=- =-=-=-=-= -=-=-=-=- =-=-
      Outras listas do RioJUG:
      SCJP (groups.yahoo. com/group/ scjp_riojug)
      SCWCD (groups.yahoo. com/group/ scwcd_riojug)
      -=-=-=-=-=-= -=-=-=-=- =-=-=-=-= -=-=-=-=- =-=-
      Yahoo! Finance

      It's Now Personal

      Guides, news,

      advice & more.

      New web site?

      Drive traffic now.

      Get your business

      on Yahoo! search.

      Yahoo! Groups

      w/ John McEnroe

      Join the All-Bran

      Day 10 Club.

      .
      _._,___







    • Show all 14 messages in this topic