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 :

triggers en java


Sujet :

JDBC Java

  1. #1
    Membre confirmé
    Inscrit en
    Mars 2007
    Messages
    193
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 193
    Par défaut triggers en java
    Salut!

    Je voudrais savoir comment reproduire le fonctionnement d'un trigger mais dans mon application java: c'est à dire que dès qu'il y a insertion d'une nouvelle ligne dans ma base de données par un programme qui tourne en arrière plan, cette ligne sera immédiatement affichée dans ma jtable.

    (j'ai utilisé un timer qui répète toute les n secondes la connexion à la base de donnée et la requête SELECT et dont le fonctionnement a réactualisé l'affichage de ma jtable mais s'il y a des nouvelles insertions dans la base pendant que l'application est en cours d'exécution ça ne marche que si je ferme l'application et je la réexécute et non en temps réel!!)

    svp aidez moi c'est vraiment urgent!!

    Merci!!

  2. #2
    Membre confirmé Avatar de austin P.
    Inscrit en
    Juin 2004
    Messages
    182
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Juin 2004
    Messages : 182
    Par défaut
    si tu utilise une datasource, verifie que ton niveau d'isolation n'est pas en RepatableRead

  3. #3
    Membre confirmé
    Inscrit en
    Mars 2007
    Messages
    193
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 193
    Par défaut
    Excuse moi je suis débutante en java donc je ne sais même pas ce que c'est qu'une datasource!

  4. #4
    Membre confirmé Avatar de austin P.
    Inscrit en
    Juin 2004
    Messages
    182
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Juin 2004
    Messages : 182
    Par défaut
    envoie la ligne de code qui te permet d'ouvrir la base de données

  5. #5
    Membre confirmé
    Inscrit en
    Mars 2007
    Messages
    193
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 193
    Par défaut
    // Charger le pilote Oracle

    DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());

    // Connexion à la base de données
    Connection conn =DriverManager.getConnection ("jdbc:oracle:thin:@127.0.0.1:1521:ubixstg", "user", "password");

  6. #6
    Membre confirmé Avatar de austin P.
    Inscrit en
    Juin 2004
    Messages
    182
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Juin 2004
    Messages : 182
    Par défaut
    essai de placer cette ligne après

    conn.setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED)

    si cela ne fonctionne pas essaie

    conn.setTransactionIsolation(Connection.TRANSACTION_READ_UNCOMMITTED)

  7. #7
    Membre confirmé
    Inscrit en
    Mars 2007
    Messages
    193
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 193
    Par défaut
    Salut!!!

    J'ai essayé ton code:

    Pour la première ligne (conn.setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED):rien ne change:la réactualisation ne se fait que si je réexecute l'application.

    Et pour le deuxième cas:la fenêtre ne s'affiche même plus!!

  8. #8
    Membre confirmé
    Inscrit en
    Mars 2007
    Messages
    193
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 193
    Par défaut
    Aucune idéé ?!!

  9. #9
    Membre confirmé Avatar de austin P.
    Inscrit en
    Juin 2004
    Messages
    182
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Juin 2004
    Messages : 182
    Par défaut
    le comportement que tu me decris est bizarre
    on a l'impression que ton application est isolé dans une transaction

    es tu sur de ne pas avoir de stacktrace ?

  10. #10
    Membre confirmé
    Inscrit en
    Mars 2007
    Messages
    193
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 193
    Par défaut
    Salut!

    Désolée mais je ne sais pas non plus ce que c'est qu'un stack trace donc je t'envoie mon code en espérant que tu puisse m'aider!

    Merci!!

    Code:

    package oracle_cnn;

    import java.util.Timer;
    import java.util.TimerTask;
    import javax.swing.*;
    import javax.swing.event.*;
    import java.awt.Dimension;
    import java.sql.*;
    import java.util.Vector;
    import javax.swing.table.DefaultTableModel;
    import java.util.Timer;
    import java.util.TimerTask;
    import java.awt.event.ActionListener;
    import java.awt.event.ActionEvent;
    import java.awt.event.MouseListener;
    import java.awt.event.MouseEvent;
    import com.sun.tools.doclets.standard.tags.SimpleTaglet;
    import com.sun.corba.se.ActivationIDL.Server;





    class test extends JPanel implements TableModelListener
    {

    public void tableChanged(TableModelEvent e)
    { }

    public static void main(String[] argv) throws SQLException {

    Timer minuteur = new Timer();

    //nouvelle fenêtre
    final JFrame f = new JFrame("Application");


    TimerTask tache = new TimerTask() {
    public void run() {

    f.setSize(1200, 1200);
    JPanel pannel = new JPanel();

    JTabbedPane onglets = new JTabbedPane(SwingConstants.TOP);

    /*********************************************************************************************/
    /*****barre de menu****/

    /* Création des composants */


    JPanel panel1= new JPanel();
    /* Bar de menu */
    JMenuBar menu_bar1 = new JMenuBar();
    /* différents menus */
    JMenu menu1 = new JMenu("Fichier");
    JMenu menu2 = new JMenu("Aide");
    /* differents choix de chaque menu */
    JMenuItem generalites = new JMenuItem("Généralités");
    JMenuItem quitter = new JMenuItem("Quitter");
    JMenuItem aide = new JMenuItem("Aide");

    /* Ajout de composants aux conteneurs */

    f.getContentPane().add(panel1,"South");
    /* Ajouter les choix au menu */
    menu1.add(generalites);
    menu1.add(quitter);
    menu2.add(aide);

    /* Ajouter les menu sur la bar de menu */
    menu_bar1.add(menu1);
    menu_bar1.add(menu2);
    /* Ajouter la bar du menu à la frame */
    f.setJMenuBar(menu_bar1);


    /* clic sur le choix Démarrer du menu fichier */
    generalites.addActionListener(new ActionListener()
    {
    public void actionPerformed(ActionEvent e)
    {
    JFrame frame1= new JFrame("Présentation de l'application");
    JPanel panel2= new JPanel();
    JLabel texte = new JLabel() ;//On crée notre objet
    texte.setPreferredSize(new Dimension(250,25)) ;//On lui donne une taille
    texte.setText("................."); //On lui donne un texte
    panel2.add(texte);//On l'ajoute au container
    frame1.getContentPane().add(panel2);
    frame1.setResizable(true);
    frame1.setSize(200,200);
    frame1.show();
    frame1.setLocationRelativeTo(null);
    }
    });
    /* clic sur le choix Fin du menu fichier */
    aide.addActionListener(new ActionListener()
    {
    public void actionPerformed(ActionEvent e)
    {
    JFrame frame2= new JFrame("Aide");
    JPanel panel3= new JPanel();
    JLabel texte = new JLabel() ;//On crée notre objet
    texte.setPreferredSize(new Dimension(250,25)) ;//On lui donne une taille
    texte.setText("................."); //On lui donne un texte
    panel3.add(texte);//On l'ajoute au container



    frame2.getContentPane().add(panel3);
    frame2.setResizable(true);
    frame2.setSize(200,200);
    frame2.show();
    frame2.setLocationRelativeTo(null);}});

    quitter.addActionListener(new ActionListener()
    {
    public void actionPerformed(ActionEvent e)
    {
    System.exit(0);
    }});


    /*****************************************************************************************/
    /**** Connexion à la base *****/

    // Charger le pilote Oracle
    try {
    DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());

    // Connexion à la base de données
    Connection conn =DriverManager.getConnection ("jdbc:oracle:thin:@127.0.0.1:1521:ubixstg", "user", "Password");

    // conn.setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED);


    //Création d'un objet requête
    Statement stmt = conn.createStatement ();

    Statement stmt1 = conn.createStatement ();

    Statement stmt2 = conn.createStatement ();

    Statement stmt4 = conn.createStatement ();

    Statement stmt3 = conn.createStatement ();
    //Envoyer la requête et récupérer le résultat
    ResultSet rset1 = stmt.executeQuery ("select col from tab1");

    ResultSet rset2 = stmt1.executeQuery ("select col from tab2");

    ResultSet rset5 = stmt2.executeQuery ("select col from tab3");

    ResultSet rset4 = stmt3.executeQuery ("select col from tab4");

    ResultSet rset6 = stmt4.executeQuery ("select col from tab5");


    /*******************************************************************************/
    /*** Affichage résultat requête 1 dans la table 1 ***/

    Vector values = new Vector();
    int i=1;
    while(rset1.next() & rset2.next()) //& rset3.next())
    {


    Vector tab1 = new Vector();
    tab1.add("Proc"+i); //on met le nom exact de la colonne affichée dans la base
    //à refaire pour les autres colones
    tab1.add(rset1.getString("col1"));
    tab1.add(rset2.getString("col2"));
    //tab1.add(rset3.getString("col3"));
    values.addElement(tab1);
    i++;
    }
    Vector names= new Vector();


    names.addElement("titre1");
    //a refaire pour plus de colone
    names.addElement("titre2");
    names.addElement("titre3");
    names.addElement(titre4");

    DefaultTableModel model = new DefaultTableModel (values,names){
    public boolean isCellEditable(int iRowIndex, int iColumnIndex)
    {
    return false;
    }
    };

    JTable tab1 = new JTable(model);

    tab1.setPreferredScrollableViewportSize(new Dimension(800, 800));

    tab1.getTableHeader().setReorderingAllowed(false);

    /****************************Affichage de la table2***********************************************/

    Vector values1 = new Vector();

    int j=1;
    while(rset4.next())
    {
    Vector tab2 = new Vector();
    tab2.add("Proc"+j);
    tab2.add("");//rset1.getString("col1")); //on met le nom exact de la colonne affichée dans la base
    //à refaire pour les autres colones
    tab2.add("");//rset1.getString("col2"));
    //tab2.add(rset4.getString("col3"));
    values1.add(tab2);
    j++;
    }
    Vector names1= new Vector();


    names1.addElement("titre1");
    //a refaire pour plus de colone
    names1.addElement("titre2");
    names1.addElement("titre3");
    names1.addElement("titre4");

    DefaultTableModel model1 = new DefaultTableModel (values1,names1){
    public boolean isCellEditable(int iRowIndex, int iColumnIndex)
    {
    return false;
    }
    };


    JTable tab2 = new JTable(model1);

    tab2.setPreferredScrollableViewportSize(new Dimension(800, 800));

    tab2.getTableHeader().setReorderingAllowed(false);

    /****************************Affichage de la table3***********************************************/

    Vector values2 = new Vector();
    int k=1;
    while(rset5.next() & rset6.next())
    {
    Vector tab3 = new Vector();
    tab3.add("Proc"+k);
    tab3.add(rset5.getString("col1"));
    //on met le nom exact de la colonne affichée dans la base
    //à refaire pour les autres colones
    tab3.add(rset6.getString("col2"));
    tab3.add("");//rset1.getString("col3"));
    values1.add(tab2);
    k++;

    values2.add(tab3);
    }
    Vector names2= new Vector();


    names2.addElement("titre1");
    //a refaire pour plus de colone
    names2.addElement("titre2");
    names2.addElement("titre3");
    names2.addElement("titre4");

    DefaultTableModel model2 = new DefaultTableModel (values2,names2){
    public boolean isCellEditable(int iRowIndex, int iColumnIndex)
    {
    return false;
    }
    };


    JTable tab3 = new JTable(model2);

    tab3.setPreferredScrollableViewportSize(new Dimension(800, 800));

    tab3.getTableHeader().setReorderingAllowed(false);
    /*******************************************************************************/

    //conteneur du premier onglet
    JPanel onglet1 = new JPanel();
    JLabel titreOnglet1 = new JLabel("Process1");
    onglet1.add(titreOnglet1);
    onglet1.setPreferredSize(new Dimension(900, 900));
    onglets.addTab("Running Process", onglet1);
    onglet1.add(new JScrollPane(tab1));

    /********************Gérer les doubles clics au niveau de la table1**************************/

    tab1.addMouseListener(new MouseListener() {
    public void mouseClicked(MouseEvent e) {
    if (e.getClickCount() == 2) {
    //code à exécuter


    JFrame fen = new JFrame("Fenêtre");
    fen.setSize(600,300);
    fen.setLocationRelativeTo(null);
    fen.setVisible(true);

    }
    }

    public void mouseEntered(MouseEvent e) {}
    public void mouseExited(MouseEvent e) {}
    public void mousePressed(MouseEvent e) {}
    public void mouseReleased(MouseEvent e) {}
    });

    /*********************************************************************/

    //conteneur du second onglet
    JPanel onglet2 = new JPanel();
    JLabel titreOnglet2 = new JLabel("Process2");
    onglet2.add(titreOnglet2);
    onglets.addTab("Database Operation", onglet2);
    onglet2.setPreferredSize(new Dimension(900, 900));
    onglet2.add(new JScrollPane(tab2));


    //conteneur du troisième ongle-t
    JPanel onglet3 = new JPanel();
    JLabel titreOnglet3 = new JLabel("Process3");
    onglet3.add(titreOnglet3);
    onglets.addTab("Process Properties", onglet3);
    onglet3.setPreferredSize(new Dimension(900, 900));
    onglet3.add(new JScrollPane(tab3));

    onglets.setOpaque(true);
    pannel.add(onglets);
    f.getContentPane().add(pannel);


    pannel.revalidate();
    pannel.repaint();


    //taille de la fenêtre
    f.setSize(1200, 1200);

    f.repaint();

    //Rendre la fenêtre visible
    f.setVisible(true);

    // Fermeture de la connexion

    conn.close();



    }
    catch (SQLException ex) {
    }
    }

    };

    minuteur.schedule(tache, 0, 12000);
    }
    }

  11. #11
    Membre confirmé Avatar de austin P.
    Inscrit en
    Juin 2004
    Messages
    182
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Juin 2004
    Messages : 182
    Par défaut
    je pense que ton probleme n'est pas lié à la base de donnée mais à ton appli swing. En effet tu recrée systematiquement toute ton interface dans la méthode run alors que tu devrais faire un simple refresh.

    donc pour en etre certains :
    dans la boucle qui te permet de remplir le vector tab1, insere

    System.out.println(rset1.getString("col1"));

    tu verra alors le nombre de ligne retourné par le statement
    si ce nombre évolue en fonction des insertions en tache de fond mais pas ton interface, le problème viens de l'interface.

    Dans ce cas pose ta question dans le forum Swing

  12. #12
    Membre confirmé
    Inscrit en
    Mars 2007
    Messages
    193
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 193
    Par défaut
    Tu avais raison!!

    Le prgramme marche parfaitement sur la console mais c'est au niveau de l'affichage qu'il y a un problème!!

    Je vais voir ça dans le forum Swing!

    Merci bcp pour ton aide!!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Trigger SQL Java
    Par boubounagh dans le forum JDBC
    Réponses: 2
    Dernier message: 16/01/2012, 18h50
  2. Comment appeler un trigger par Java ?
    Par sophiesophie dans le forum JDBC
    Réponses: 9
    Dernier message: 26/10/2011, 15h49
  3. executer un trigger avec java
    Par 080983 dans le forum Langage
    Réponses: 1
    Dernier message: 25/08/2007, 20h51
  4. triggers en java
    Par mmb04 dans le forum AWT/Swing
    Réponses: 8
    Dernier message: 03/04/2007, 12h22
  5. Trigger > Classe Java
    Par jiss75 dans le forum Oracle
    Réponses: 3
    Dernier message: 06/12/2006, 10h23

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