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: