IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JDBC Java Discussion :

Comment appeler un trigger par Java ?


Sujet :

JDBC Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Janvier 2008
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 57
    Par défaut Comment appeler un trigger par Java ?
    Bonsoir,
    j'a i crée un petit programme en java qui me permet de faire les MAJ d'une table (exp:article")
    et j'ai créer un trigger qui se déclenche quand je fait une MAJ.
    sous oracle le trigger s'execute sans erreur. mais je sais pas comment l'appeler dans mon code java

    pour exécuter une requete select j'ai utilisé le code suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    public ResultSet exec(String sql)
        {
    	ResultSet rs = null;
    	try
            {
                stm = cnx.createStatement();
                rs = stm.executeQuery(sql);
             }catch(Exception e)
            {
                System.out.println("Echec de l'execution de la requete:" 
                +e.getMessage());
    	}
            return rs ;
        }
    et pour exécuter une requete update j'ai utilisé le code suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    public int update(String sql)
        {
            int i=-1;
            try
            {
                 stm = cnx.createStatement();
                 i =  stm.executeUpdate(sql);
            }catch(Exception e)
            {
                System.out.println("Echec de l'execution de la requete sqlupdate :"+ 
                e.getMessage());
            }
     
     
    return i ;
    }
    svp aidez-moi de résoudre ce problème(comment appeler un trigger) et merci beaucoup

  2. #2
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    la définition même d'un trigger, c'est qu'il est appelé automatiquement par la DB, tu n'a rien de particulier à faire, juste faire tes update comme si de rien n'était.

  3. #3
    Membre confirmé
    Inscrit en
    Janvier 2008
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 57
    Par défaut
    MERCI pour votre réponse, mais excusez-moi j'ai pas compris votre réponse
    j'ai essayé d'appeler ce trigger par les deux méthodes mais rien changé

    exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     reqSql8="create or replace trigger triggerSupp"+jTable1.getValueAt(row, column)+""+date_heure;
           reqSql8 =reqSql8 + " before delete on "+jTable1.getValueAt(row, column);
           reqSql8 =reqSql8 + " FOR EACH ROW begin insert into "+nom_tabLog+" values(seq_t.nextval";
           for(int s=0;s<compt_tab;s++) 
           {
               reqSql8 =reqSql8 +",:old."+tab_Col_Ajou_Supp[s];
           }
           reqSql8 =reqSql8  +");"+"\n"+"end;"+"\n"+"/";
    System.out.println("req8 = "+reqSql8);
    //requete exécuté sous oracle sans erreur 
           int reqTrig=c.update(reqSql8);           
           System.out.println("reqTrig====="+reqTrig);
    ****resultat du console****
    req8 = create or replace trigger triggerSupparticle241020111914 before delete on article FOR EACH ROW begin insert into LOGarticle241020111914 values(seq_t.nextval,:old.num_art,:old.lib_art,:old.prix_art,:old.qte_art);
    end;
    /
    création de statement update ok
    fonction update: i=0
    reqTrig=====0

  4. #4
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Tu crée un trigger chaque minute qui passe? Et une table de log qui va avec? Elle va pas vivre longtemps ta base de données à ce rythme là.

    Les trigger c'est comme les tables. Ca se crée une fois pour toutes à l'installation du logiciel qui les utilise. Pas besoin de les recréer à chaque fois

    Sinon, je ne vois aucun message d'erreur dans ton execution, qu'est-ce qui te chagrine?

  5. #5
    Membre confirmé
    Inscrit en
    Janvier 2008
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 57
    Par défaut
    oui bien sure vous avez raison, mais c'est un programme pour la sécurité d'une BD . et le directeur du magasin a le droit de créer des triggers sur ses tables.

  6. #6
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    Pourrais-tu nous dire ce que tu cherches à faire avec ce trigger ?
    Pour moi, c'est également "Syntax error" sur ce coup
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Me répète hein, mais ...

    Citation Envoyé par tchize_ Voir le message
    Sinon, je ne vois aucun message d'erreur dans ton execution, qu'est-ce qui te chagrine?

  8. #8
    Membre confirmé
    Inscrit en
    Janvier 2008
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 57
    Par défaut
    svp oubliez ce trigger et voici un simple exemple qui explique mon problème.

    j'ai crée un trigger T1 sous oracle. il s'exécute sans erreur et quand je supprime une ligne de la table "ss", une nouvelle ligne est ajoutée dans "ss3" .
    mon problème: quand j'intégre le code du trigger dans mon programme, et je lance une requete de suppression il m'affiche une erreur
    =>Echec de l'execution de la requete sqlupdate :ORA-04098: Déclencheur 'SYSTEM.T1' non valide. Echec de la revalidation
    reqTrig1111= -1


    1)requete de suppression
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     String ss1="delete from ss where s1=12";
                int reqTrig1=c.update(ss1);           
                System.out.println("reqTrig1111= "+reqTrig1);
    2)Trigger T1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    String chTrigger="create or replace trigger T1 ";
    chTrigger=chTrigger+"BEFORE delete on ss FOR EACH ROW begin ";
    chTrigger=chTrigger+"insert into ss3 values(seq_t.nextval,:old.s1,:old.s2)";
    chTrigger=chTrigger+"\n"+"end;"+"\n"+"/";
    
    int reqTrig=c.update(chTrigger);           
    System.out.println("reqTrig= "+reqTrig);
    3)description des tables

    SQL> desc ss;
    Nom NULL ? Type
    -------------------- ------
    S1 NUMBER(4)
    S2 NUMBER(4)
    SQL> desc ss3;
    Nom NULL ? Type
    ------------ -------- ------
    NUM NUMBER(4)
    S1 NUMBER(4)
    S2 NUMBER(4)
    svp aidez-moi, il faut compléter mon application , merciiiiiiiiiiiiiieeeee pour tous

Discussions similaires

  1. Comment appeler un service web Java dans un client C#
    Par Caillou63 dans le forum Services Web
    Réponses: 6
    Dernier message: 02/04/2010, 10h11
  2. [MySQL] Comment appeler du code PHP par requête
    Par mickdu90 dans le forum PHP & Base de données
    Réponses: 14
    Dernier message: 19/04/2006, 10h55
  3. comment appeler une fonction JAVA en JAVASCRIPT ?
    Par heleneh dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 13/09/2005, 12h21
  4. comment appeler une fonction JAVA en JAVASCRIPT ?
    Par heleneh dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 13/09/2005, 12h04
  5. Réponses: 3
    Dernier message: 27/01/2004, 16h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo