Como pegar data/hora do servidor e Conexão de banco

9 respostas
S

Pessoal, tenho 2 dúvidas:

1º - Como posso pegar data e hora do servidor e não do client ?

2º - Minhas aplicações utiliza uma classe que cede as conexões do banco de dados, em minhas aplicãções DAO solicitam a conexão, acessa os dados e libera a conexão, esta forma esta correta ? Se sim, quando tenho sucessivos acessos ao banco ao mesmo tempo este processo de pegar e liberar a conexão não prejudica a performance ? Existe outra forma ?

Aguardo.

9 Respostas

T
  1. Escreva uma transação no server que retorne a data e hora desejados.
  2. Se você usar um connection pool através do datasource (isso normalmente é implementado pelos application servers, como o JBoss ou o J2EE Reference Implementation, ou o WebSphere, WebLogic etc. ) não prejudica a performance; é o método recomendado.
S

Deculpe-me mas minha transação é Java Application (Swing) e não estou utilizando servidor de aplicações, neste caso como faço em ambos casos ?

T

Você está fazendo uma aplicação Swing que acessa diretamente o banco? Para pegar a data e hora do banco de dados use algum comando SELECT (a sintaxe correta SQL depende do seu banco).
Para usar “connection pooling” use algo como o DBCP ( http://jakarta.apache.org/commons/dbcp/ ).

S

Entendi, mas tenho um problema com esta aplicação, ela tem a função de mostrar a hora na tela constantemente, isto é, ter o horário atualizando minuto a minuto por se tratar de ponto eletrônico de funcionários e eles deverão “picar” o cartão no seu horário de turno e este turno deve estar dentro do limite de horas que estaria mostrando no Relógio (tela), assim sendo, vc não acha que ficaria muito lento fazer acesso constantemente no banco ? Existe alguma outra forma ? :shock:

fmeyer

metodo rapido e porco …

" select now() "no mysql … ou a função correspondente no seu banco de dados da uma olhada no help

T

O correto mesmo seria essa máquina estar com o relógio sincronizado (bom, essa sincronização depende do sistema operacional e do acesso que ela tem à Internet, se ela usar algum cliente de NTP - acho que o Linux tem um cliente de NTP, e o Windows XP e 2003 podem se sincronizar automaticamente se tiverem acesso ao servidor time.windows.com, ou a um servidor de Active Directory no caso de uma máquina Windows XP/2003).

Mas uma forma seria a seguinte:

  • Você sabe que se sua máquina tiver alguma diferença de tempo com o servidor, ela deve estar com o relógio adiantado ou atrasado de um valor aproximadamente constante (digamos que ela esteja sempre 4 minutos e 30 segundos atrasada). Você poderia consultar a máquina servidora uma vez a cada 5 minutos, e mostrar o horário da própria máquina cliente, mais a diferença de tempo entre as duas máquinas nos instantes em que a máquina não estiver acessível. Ou então acessar a máquina servidora a cada 30 segundos - se você precisa de uma precisão de 1 minuto, acessar a cada 30 segundos já é mais que suficiente.
S

Entendi, mas é a única forma de ficar pegando a data e hora é através do select ?

T

Se sua máquina é Windows e a máquina do servidor é Windows também, e se você pode chamar o comando net time (talvez você não tenha as permissões corretas), e se você chamar esse comando muito de vez em quando (porque é muito lento - leva alguns segundos), então você não precisa fazer o select. Por exemplo:

C>net time \servidor
Current time at \servidor is 16/8/2005 16:01

The command completed successfully.
dmandrak

thingol:
Se sua máquina é Windows e a máquina do servidor é Windows também, e se você pode chamar o comando net time (talvez você não tenha as permissões corretas), e se você chamar esse comando muito de vez em quando (porque é muito lento - leva alguns segundos), então você não precisa fazer o select. Por exemplo:

C>net time \servidor
Current time at \servidor is 16/8/2005 16:01

The command completed successfully.

Complemetando o que o thingol falou.

Manda esse comando aqui:

net time /IP_DO_SERVIDOR /set /yes

Em um prompt de comando mesmo.

Se quiser, faz que nem eu, cria um .bat com o seguinte texto

net time /IP_DO_SERVIDOR /set /yes
exit

E poe no iniciar. Toda vez que ligar a tua máquina ela ajeita a hora com o servidor.

Ao invés de ir buscar nele, vc usa a sua própria system time.

Se vc quiser manter as duas diferentes, ae é outro papo…

Mas pra mim elas tinham que estar sincronizadas e por isso funcionou legal!

Criado 16 de agosto de 2005
Ultima resposta 12 de dez. de 2008
Respostas 9
Participantes 4