Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

horacio2009

verificacao de registros em banco de dados...

Recommended Posts

bom dia a todos!!

tudo bem com vocês?

pessoal, é assim, quero passar um sistema de administração de clientes que atualmente roda em web(tipo um site)para um programa feito em java, mas tenho algumas duvidas(como todo iniciante..rsrs)

antigamente, ocorria, devido a demora de internet, sobrecarga de navegador(pessoal aqui usa o chrome) um operador ia buscar um cliente, acontecia de outro operador pegar o mesmo cliente, porém através de ajax consegui resolver isso, a cada "X" segundos, ele faz uma varredura naquele registro, e verifica, se o operador que estiver na ficha for diferente do informado no registro, ele "derruba" o sujeito, evitando assim, erros...e tem funcionado corretamente...

porém, como resolvo isso em java????

como impedir que qualquer fator externo jogue 2 operadores na mesma ficha???

o fato de não ter navegador sei que já vai me ajudar bastante, mas o que vocês podem me indicar???

Obrigado a todos!!

Horácio

Compartilhar este post


Link para o post
Compartilhar em outros sites

Integridade relacional. Uma boa modelagem no banco de dados evita esse tipo de coisa.

Compartilhar este post


Link para o post
Compartilhar em outros sites

integridade "relacional"???

estou procurando no google e vi apenas integridade referencial:

link do google....

 

Caso seja relacional mesmo tem como falar um pouco mais???

fiquei muito interessado...

 

É referencial mesmo. Confusão minha. Me referia à integridade na relação entre as entidades. No caso, você teria por exemplo uma entidade Operador e outra Ficha. Sendo que um Operador poderia estar em muitas fichas mas uma Ficha só poderia ter um Operador.

 

Operador 1 x 0..* Ficha

public class Operador {

  private List<Ficha> fichas;

  // Código
}

 

public class Ficha {

  private Operador operador;

  // Código
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

é...andei fuçando essa referencial e achei interessante...

mas ainda não entendi de que forma isso pode me ajudar, vou te explicar como funciona o sistema que eu montei:

você acessa uma ficha, assim que é acessada, o php(liguagem que uso atualmente)pega o ID do operador e lança no campo(capture) da ficha o id desse operador...

ok, isso funciona certinho e gera a relação que preciso.

Porém , meses atrás, acontecia isso:

2 operadores conseguiam acessar a mesma ficha , porém, apenas um tinha seu id registrado, por exemplo, operado 8 e 9 na ficha 20, mas apenas o 9 ficava registrado, não havia erro na gravação, porém 2 pessoas acessavam a mesma ficha.

notando isso, fiz isso com ajax:

8 e 9 pegam a ficha,o ajax vai até a ficha e verifica qual o id registrado, ele viu que é o 9,aí, o 8 é redirecionado rapidamente para a home.problema resolvido graças a verificação.

agora temos as possíveis causas, poderia ser problema na internet tbm, pois mexemos há alguns meses e realmente ficou mais rápido.

 

agora, voltando para tabela relacional:

se formos pensar que nenhuma ficha pode ser pega por mais de um operador, qual a diferença nesse caso, se eu disser: selecione tudo no banco onde capture="0"(onde 0 significa que não há ninguém que pegou essa ficha)

de que forma essa tabela pode otimizar esse processo e impedir que a mesma ficha seja pega por outro?

não estou discordando nem questionando o que disse, mas realmente não entendi a mecânica real disso...alterando a tabela para o formmato InnoBd, isso acaba de vez?

outra coisa, supondo que haja problemas físicos(internet, cabeamento mal feito, sei lá)esse processo vai me ajudar?

Bom, é isso, to muito curioso com esse formato de tabela...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara! Sabe o que isso está me parecendo? Erro de concorrência. Duas pessoas acessam ao mesmo tempo um registro. Dessa forma, valerá a última atualização (update). Não posso afirmar com certeza, mas tenho a impressão de que o motor (engine) InnoDB do MySQL trata essa situação. Recomendo que pesquise além de integridade relacional, mecanismos para evitar concorrência de acesso. Com Java você poderia utilizar um framework ORM (Hibernate, TopLink, iBatis, Avaje, SimpleORM, etc.) ou até mesmo EJB ou Spring para Java EE.

Compartilhar este post


Link para o post
Compartilhar em outros sites

muito bem lembrado ...tem esses frameworks mesmo...

escuto falar muito bem do hibernate...como ele trataria esse tipo de situação???

 

complementando a pergunta:

tenho a tabela desses clientes que está no formato: "MyISAM" para mudar para InnoBd, apenas mudo, ou tenho que realizar algum procedimento especifico?????

Caramba...esse post aguçou ainda mais a minha curiosidade!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Em se tratando do hibernate, dá uma lida nisso http://docs.jboss.org/hibernate/core/3.5/reference/pt-BR/html/transactions.html

Agora quanto às tabelas, recomendo que abra um tópico no forum de MySQL.

Compartilhar este post


Link para o post
Compartilhar em outros sites

vou correr lá agora mesmo!!!

ei, obrigado pelo link!!!!!

e claro...obrigado pela atenção!!!!

essa informação das tabelas de referencia foram ótimas!!

obrigado!!

Horácio

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.