écouteur sur base de données

cs_cabiste Messages postés 6 Date d'inscription mardi 10 juillet 2007 Statut Membre Dernière intervention 22 mars 2008 - 21 mars 2008 à 15:50
 Utilisateur anonyme - 22 mars 2008 à 14:10
bonjour
je veux faire un écouteur sur ma base de données (si il y a un changement dans la base) avec jdbc ou hibernate ou n'importe quel autre techno java.
est -ce qu'il y a qui peut m'aider
merci

3 réponses

Utilisateur anonyme
21 mars 2008 à 23:03
C'est une idée un peu bizarre que tu as. D'abord, tu pourrais quand même jeter un coup d'oeil dans la documentation Java avant de poser des questions ici. Je pense que tu devrais utiliser un trigger stocké en base de données. Si tu cherches sur internet, ce que tu décris s'appelle un "database listener" et ça revient à utiliser un trigger. Sinon, tu peux parfois définir un PropertyChangeListener ou un VetoableChangeListener sur certaines bases de données SQL du genre MySQL ou PostGreSQL.

Voici un exemple sur Oracle :
import java.sql.*;
import java.io.*;
import oracle.jdbc.driver.*;

public class DBTrigger {
public static void logSal (int empID, float oldSal, float newSal)
throws SQLException {
Connection conn = new OracleDriver().defaultConnection();
String sql = "INSERT INTO sal_audit VALUES (?, ?, ?)";
try {
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setInt(1, empID);
pstmt.setFloat(2, oldSal);
pstmt.setFloat(3, newSal);
pstmt.executeUpdate();
pstmt.close();
} catch (SQLException e) {System.err.println(e.getMessage());}
}
}

CREATE OR REPLACE PROCEDURE log_sal (
emp_id NUMBER, old_sal NUMBER, new_sal NUMBER)
AS LANGUAGE JAVA
NAME 'DBTrigger.logSal(int, float, float)';

CREATE TABLE sal_audit (
empno NUMBER,
oldsal NUMBER,
newsal NUMBER);

CREATE OR REPLACE TRIGGER sal_trig
AFTER UPDATE OF sal ON emp
FOR EACH ROW
WHEN (new.sal > 1.2 * old.sal)
CALL log_sal(:new.empno, :old.sal, :new.sal);

TUER : http://tuer.tuxfamily.org/tuer.php

yeah! vive java
0
cs_cabiste Messages postés 6 Date d'inscription mardi 10 juillet 2007 Statut Membre Dernière intervention 22 mars 2008
22 mars 2008 à 10:00
bonjour gouessej et merci pour ta réponse
le programme que je cherche à faire doit etre un programme extérieur à la base de données pour réaliser une synchronisation entre une base mysql et une autre maxdb
et d'après mes connaissances un trigger ne peut agir que sur des bases homogènes(de meme type).
si tu connais une procédure en pl/sql que je peux la mettre dans le trigger pour se connecter à une autre base différente, je serai très content de ton aide sinon peux-tu m'aider à réaliser ce programme.
merci
0
Utilisateur anonyme
22 mars 2008 à 14:10
Ecoute, l'exemple que je te donne ci-dessus te permet d'associer du code Java à un trigger. Tu peux donc associer ton code Java de synchronisation à un trigger. Il faut juste que tu trouves la syntaxe qui marche pour MySQL car ce n'est pas la même que pour Oracle, c'est la seule difficulté. Il faut faire pareil dans l'autre sens pour l'autre base de données. Par conséquent, je ne suis pas d'accord avec ce que tu dis. Il faut que chaque base de données possède un trigger et que chaque trigger puisse appeler du code Java.

Cependant, je précise que c'est un forum d'aides, personne ne doit faire le travail à ta place, tu peux venir demander un coup de main une fois que tu t'es toi-même confronté aux difficultés.

TUER : http://tuer.tuxfamily.org/tuer.php

yeah! vive java
0
Rejoignez-nous