Como detectar a alteração numa tabela de um BD?

Fala pessoal,

imaginem que tenho um sistema que mapeia uma tabela de um banco de dados num objeto, através do padrão DAO.

Tenho um campo na tabela que é mapeado para um atributo da classe correspondente. Se eu instanciar um objeto, correspondendo a um registro, gostaria de alterar este atributo toda vez que alterassem o campo relativo na tabela do BD.

É algo semelhante ao padrão Observer: quero que o objeto esteja inscrito como “ouvinte” da tabela, e altere seu atributo toda vez que alteremos a tabela.

Como fazer isso de maneira bonita do ponto de vista de OO ?

[]'s a todos,
Rafael M.

Nai sei se entendi direito, mas se você quiser alterar dados de outras tabelas quando uma é alterada você pode utilizar triggers. Acho que isso resolveria o seu problema.

[]´s

não e melhor usar uma trigger pra fazer isto não?

Fala pessoal,

na verdade eu não tenho interesse em alterar outra tabela, e sim um atributo de um objeto…

Vamos colocar a seguinte forma: como detectar alterações em uma tabela do MSSQLSERVER e capturar os valores alterados como o JAVA ?

[]'s a todos,
Rafael M.

Olha, nunca passei por uma situação como essa. Mas acho que se você está implementando a parte de persistencia no banco, você consegue capturar a alteração antes de ela ser efetuada, isso não resolveria o problema?

Na verdade os usuários alteram ao banco através de um sistema, e eu estou programando um outro sistema que vai atuar somente como leitor deste banco. Eu quero saber quando os usuários alteram o banco e realizar operações específicas.

É simples assim: eu quero programar um “listener” de banco de dados.

[]'s a todos,
Rafael M.

Se qualquer aplicação (incluindo aplicações não-Java) estiverem alterando a tal tabela, talvez seja necessário criar um trigger que logue as alterações em uma outra tabela. Aí você, periodicamente, consulta a tal tabela. Mas isso é uma “solução genérica”.
Veja a documentação do seu banco de dados (e diga qual é o seu banco, oras!) para ver qual é a melhor solução para seu caso.
Se o que você quer implementar é um log de auditoria, ou então um sistema de replicação, existem coisas prontas (às vezes no próprio banco, às vezes como produto de terceiros).

http://mike2.openmethodology.org/wiki/ETL_Design_Techniques_for_Incremental_Capture