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

Composants Java Discussion :

Database et JTable


Sujet :

Composants Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Février 2009
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 64
    Par défaut Database et JTable
    Bonjour à tous,

    J'ai un petit problème de conception pour un JTable en java. J'utilise un modèle de table pour stocker les données, un renderer pour le rendu des cellules et un éditeur pour modifier les cellules.

    J'ai créé une couche métier me permettant de faire les SELECT, UPDATE et INSERT en base de donnée. Je récupère sous forme de liste depuis la couche métier, les données à transmettre au modèle de la JTable.

    On trouve d'excellent tutoriaux sur les JTables comme celui ci http://baptiste-wicht.developpez.com.../swing/jtable/ mais très peu sur l’interaction avec une base de données.

    Ma question est assez simple, pour la communication avec la base de données, est il préférable de créer une instance de la couche métier directement dans le modèle de la JTable :

    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 class ModelServiceRoulement extends AbstractTableModel{
       private final Vector<Object> title;
       private final Vector<Vector<Object>> datas;
    ....
     
       public void setValueAt(Object value, int row, int col) {
          try {
             connex.update(value);
     
             datas.elementAt(row).setElementAt(value, col); 
             fireTableCellUpdated(row, col);
          }
          catch (SQLException e) {}
          catch (Exception e) {}
       }
    Ou bien de communiquer avec la base de données depuis l'extérieur (la vue) grace à l'évènement TableModelListener
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    class TableRoulementListener implements TableModelListener {
       @Override
       public void tableChanged(TableModelEvent e) {
          switch (e.getType()) {
             case TableModelEvent.UPDATE :
                try {
    	       Object value = modelTable.getValueAt(e.getFirstRow(), e.getColumn());  
                   connex.update(value);
                }
                catch (SQLException e) {}
                catch (Exception e) {}
                break;
          }

  2. #2
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Pour faire simple, la JTable n'est pas censée dialoguer directement avec les appels de la base de données.

    En fait tu vas avoir une classe qui sert de contrôleur au dessus du composant contenant la JTable et les boutons en relation qui propose des méthodes permettant de lancer la récupération des données,l'update & cie.

    Donc la solution préférable se rapproche de la seconde en fait.

    De plus il faut que toutes tes actions JDBC soient réalisés dans un thread externe ou un SwingWorker car ce sont des actions longues (au sens programmatique en Swing, 1 seconde, c'est long) susceptibles de bloquer le thread du GUI et de figer l'application. DOnc il ne faut surtout pas faire es divers appels depuis le le modèle qui lui. Je te conseille donc de te plonger très vite dans l'utilisation du SwingWorker.

Discussions similaires

  1. Redhat-9 changer le path des databases
    Par jean christophe dans le forum Installation
    Réponses: 7
    Dernier message: 30/05/2003, 17h53
  2. [SWING]jTable + Focus
    Par chady dans le forum Composants
    Réponses: 5
    Dernier message: 27/02/2003, 14h51
  3. JBuilder7 & JTable Colonne alignement
    Par Tonton Luc dans le forum JBuilder
    Réponses: 5
    Dernier message: 06/11/2002, 17h32
  4. Réponses: 9
    Dernier message: 12/08/2002, 07h38
  5. Tutoriels et liens pour le Borland Database Engine
    Par Community Management dans le forum Paradox
    Réponses: 0
    Dernier message: 25/03/2002, 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