Alerta ao inserir novo registro no banco

Galera,

Preciso de uma aplicação simples que fique lendo uma tabela no bando e sempre que aparecer um novo registro, me avise.

Exemplo: abro a aplicação .jar e nao me mostra nada.
Apos inserir um novo dado na tabela, a aplicação de a mensagem: Novo dado inserido… e aguarde ate inserir o proximo…
assim que inserir mais um, exiba a mensagem: Novo dado inserido…

E por ai vai…

Alguem pode me ajudar?

tenta da uma olhadinha no apache camel, deve ter algo parecido lá

abrasss

OK, você tem conhecimento em Java ? tem conhecimento em JDBC ?

Comecei no java a pouco tempo, mas conheco outras linguagem bem!

Preciso somente desse alerta, se caso inserir uma nova linha na tabela.

E que se vc não conhecer JDBC, Java Basico, Swing e Threads vai ficar dificil fazer isso.

Como funciona essa tabela, ela sempre vai estar vazia ? ou sempre que incrementar 1 ou mais registros você quer avisar ?

A tabela sempre fica cheia… ao incrementar somente 1 registro me avisar…

pensei q era coisa bem simples isso …

eu ja tenho a conexao com o banco, ja consigo ler registros, tudo certinho … fiz estes passos para aprender mais… dai preciso dessa aplicação agra… que me avisa ao inserir 1 novo registro.

OBS: to usando postgresql

Essa classe que to usando para conectar e etc … talves pode ajudar a fazer o q preciso…

package br.mb.tutorialJavaMail;
import java.sql.Statement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;

public class conexao {
private static ResultSet next;
public static void main(String[] args) {

    try {  

        String url = "jdbc:postgresql://localhost:5432/TesteJava";  
        String usuario = "postgres";  
        String senha = "00000000000000";  

        Class.forName("org.postgresql.Driver");  

        Connection con;  

        con = DriverManager.getConnection(url, usuario, senha);  

        System.out.println("Conexão realizada com sucesso.");  

        Statement stm = con.createStatement();  

       // stm.executeQuery("INSERT INTO teste VALUES (1,'Cynthia')");  
        String SQL = "Select * from notificacoes order by id desc limit 1";
           ResultSet rs = stm.executeQuery(SQL);  

           rs.next();

            String id = rs.getString("id");     
   System.out.println("linhas: "+id);  


  
        con.close();  

    } catch (Exception e) {  
         e.printStackTrace();  
    }  
}  

}

Mas se já conhece outras linguagens, por que não faz em uma outra linguagem já conhecida e que seja “a coisa mais simples do mundo”?
Aliás, a própria idéia de alertar a cada inserção já diz que não é simples, afinal, o banco não vai chamar tua aplicação a partir de uma trigger para te dizer “Ô mermão, acabaram de inserir um registro aqui, dá uma olhada”.
É você que precisa ir ao banco de dados a cada período de tempo. Isso, caso seja malfeito, poderá extrapolar o limite de acessos ao banco de dados e a memória da JVM, entre outras coisas.

O problema é que eu nao so quero que me avise… Ja tenho pronto uma aplicação em java que vai enviar esse ultimo registro por email… é um sistema de chamados… sempre q abre um novo chamado, envia um email… o envio de emial esta pronto… so falta msm pegar esse ultimo registro inserido e desmembrar no email para enviar

Acontece que fazer isso, da forma e pelo “lado” que você está querendo fazer é a pior das opções.
Por que raios não faz quando o próprio sistema está inserindo o tal chamado e não depois que o banco de dados já tem o registro?
É muito mais simples e menos custoso.

Segue um exemplo simples se intreface gráfica.


import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class JDBCRegisterMonitor {
	
	public static void main(String[] args) {

		Connection connection = null;

		try {
			
			Class.forName("com.mysql.jdbc.Driver");

			connection = DriverManager.getConnection("jdbc:mysql://12.0.0.1:3306/test", "root", "");
			
			PreparedStatement pstmt = connection.prepareStatement("select count(*) from institution");
			ResultSet result = pstmt.executeQuery();

			result.next();
			
			int count = result.getInt(1);
			
			while (true) {
				pstmt = connection.prepareStatement("select count(*) from institution");
				result = pstmt.executeQuery();
	
				result.next();
				
				int currentCount = result.getInt(1);
				if (currentCount > count) {
					System.out.println(currentCount-count + " registros inseridos");
					count = currentCount;
				}
				
				Thread.sleep(5000);//pausa de 5 em 5 segundos para fazer nova verificação
			}
			
		} catch (Exception ex) {
			ex.printStackTrace();
		} finally {
			if (connection != null) {
				try {
					connection.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
			}
		}
		
	}

}

meu amigo… independente da linguagem eu faria o seguinte:

primeiro criar uma triger no banco que quando houver
um registro inserido na sua tabela adicione
este registro em uma tabela qualquer
ex: (tabregincluidos)…

nesta tabela eu colocaria um flag nela…
na aplicacao que vc vai desenvolver basta
le se tem algum registro na tabela tabregincluidos
com o flag igual a 0

depois que vc processar e fazer o que vc quiser com
este registro vc marca o flag para 1… apenas para
mostrar que vc processou este
registro…

isto resolveria o seu problema independentemente
da linguagem que vc estiver usando…

Por favor, ao postar tópicos, NÃO DEIXE O TÍTULO INTEIRO EM LETRAS MAIÚSCULAS.

Além disso, ao postar código, siga essas dicas para deixa-lo formatado: