Dúvida em relação a código SQL?

bom tou pensando em criar uma rotina para ficar fazendo alert a cada novo registro em uma tabela
mas eu estou com dúvida como eu conseguiria fazer essa verificação se um novo registro foi adicionado a uma determinada tabela?
é possível?
alguém poderia me dar um exemplo?

Tu pode fazer com trigger…
Evento after insert…

mas vc poderia me dar um exemplo da estrutura?
de como saber se um novo registro foi adicionado?

Esse alert seria o alert do javascript na tela mesmo? Se sim, vc quer esse alert quando o usuário acabar de registrar algo nessa tabela ou que qualquer outro usuário logado no sistema receba o alert avisando que algum produto foi registrado por algum outro usuário?

Eu tenho categorias ex user normal
e adm

eu queria fazer uma rotina para ter um alert sempre que um regsitro novo for insediro em uma tabela chamada requisições
mas eu n faço ideia como faria essa checagem no sql
eu tenho alguns atributos nessa tabela como date time de quandp é criado.

ahh… então uma trigger não resolve seu problema.
tu pode criar uma função recursiva definindo o segundos/minutos etc que ela será executada ,verificando se foi adicionado novos registros.
porém essa forma irá consumir muito do servidor, a melhor forma é utilizando websockets.

entendi vou procurar sobre
mas sobre essa verificação você pdoeria me dar uma luz de como eu faço?
pois eu n estou conseguindo pensar em algo.

Você pode fazer um timer que executa de tempo em tempo disparando uma consulta e verificando se existe o registro que você está procurando!

Exemplo:

import java.util.Timer;
import java.util.TimerTask;

public class Example {
	public static final long TIME = (1000 * 60); //Tempo configurado fará com que execute a cada 1 minuto    	

	public static void main(String ... args) {
		System.out.println("Iniciou a execução...");
		Timer timer = null;
		if (timer == null) {
			timer = new Timer();
			TimerTask task = new TimerTask() {
				public void run() {
					try {
						System.out.println("Executando a tarefa agendada no tempo configurado...");
						//Colocar seu código de verificação do registro que está analisando
					} catch (Exception e) {
						e.printStackTrace();
					}
				}
			};
			timer.scheduleAtFixedRate(task, TIME , TIME );
		}
	}
}
1 curtida

Opa então eu pensei em fazer isso o problema é que já procurei como eu conseguiria fazer essa verificação de quando um novo registro for inserido em uma determinada tabela e não consegui achar nada sobre.

Simples, imagina o seguinte!

Ao executar o comando SQL count da tabela, você vai obeter o total de registros que essa tabela possuí inicialmente, certo?

SELECT COUNT(*) FROM MINHA_TABELA;

Tendo esse valor em mãos, ao executar uma verificação de tempo em tempo, quando essa consulta retornar um valor maior que o anterior recuperado isso significa que um novo registro foi inserido.

Porém você deve pensar também que se houver exclusões nessa tabela o valor de comparação também deve ser atualizado, para que o código funcione corretamente!

O jeito mais simples é saber que tipo de registro você está esperando e consultar por esse registro único na tabela, dessa forma você sempre garante a obtenção do resultado esperado independente da quantidade de registros contidos na tabela.

Você nunca vai encontrar nada pronto que resolva o seu problema, você tem que entender o problema e pensar na melhor solução, no máximo na internet você vai conseguir exemplos de coisas parecidas para ter como base, olhe os exemplos, faça experimentações com o seu cenário e crie a sua solução de acordo com o que você espera.

1 curtida

Vlw mano vou tentar fazer
você poderia tirar só mais uma dúvida?
Seria melhor utilizando esse timer ou utilizando o quartz?
ambos seriam a mesma coisa?

Depende muito do contexto de aplicabilidade, no seu caso acredito que o TimerTask já atende bem, o Quartz trás muitos outros recursos de nível funcional que você vai acabar não utilizando, mas caso queira utilizar por questões de conhecer e praticar não vejo problema algum nisso, os dois atendem.

1 curtida

Bom o trigger atenderia pois ele verifica na base de dados se foi adicionado um novo registro ou não porque toda vez que um registro é adicionado é disparadi um função e se o trigger está ativo para perceber esta função ele vai ser acionado.Porque se usar o TimerTask você terá de fazer várias implementações para quando um registro for deletado e até mesmo mudado e outra que isso iria pesar o seu servidor

1 curtida

Você poderia me dar um exemplo de como eu perceber essa função com uma trigget man?

Dê uma olha neste link está muito fácil de entender
https://www.devmedia.com.br/triggers-no-sql-server-teoria-e-pratica-aplicada-em-uma-situacao-real/28194

1 curtida

Poderia explicar melhor como funcionaria utilizando trigger, somente a nível de curiosidade e para fins de conhecimento?

Porquê eu acredito que não atenderia, veja bem, mesmo tendo uma trigger criada e configurada para ser acionada nos eventos INSERT/UPDATE/DELETE da tabela em questão, nesse caso em específico ele precisa exibir um alert na aplicação sempre que for identificado um novo registro na tabela, não vejo como uma trigger poderia atender este recurso, até por isso sugeri a rotina que verifica de tempo em tempo se a quantidade de registros na tabela foi alterada.

A única situação em que vejo a possibilidade de uso da trigger seria ele ter uma tabela de apoio em que, quando a trigger for acionada pelo evento INSERT da tabela requisição, a mesma insira um novo resgistro nessa tabela de apoio, e o TimerTask tratar a verificação em cima dessa tabela de apoio, que seria mais simples do que tratar pela tabela requisição somente.

1 curtida

Bom em aplicação onde se utiliza nem necessita de trigger no próprio react e com bibliote as dq pra retornar o alert

No java eu não sei implementar muito bem o trigger mais sei que tem como.Pois ja vi fazerem isto.Porque se usassem o timertask teria que toda a hora executar uma consulta sql no banco e isto pesaria muito a aplicação.Vou dar umas pesquisadas a mais depois respondo melhor como implementar corretamente no java. Ai um link do javadocs
https://docs.oracle.com/cd/B19188_01/doc/B15920/jdbc.htm

Depende de quanto em quanto tempo se é disparada a rotina, e depende de qual consulta é executada, cada caso é um caso, há cenários em que pode se usar e há cenários que isso é inviável, mas acredito não ser o caso aqui.

Não entendi o quê você quis dizer, pode explicar melhor?

Esse link é da documentação do JDBC, não entendi a relação dele com o assunto!

1 curtida

Nesta documentação tem alguns métodos que verifica se o dado foi adicionado ou não tipo o Rowinserted que pode ser usado.Vou ver isto melhor e verificar mais as coisas.Na verdade se for utilizar o javascript se fir pra infirmar todos que ym registro fou adicionado pode utilizar uma biblioteca que quando chamar o método insert disparar uma ação no backend para todos verem