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 :

[jTable & HSQLDB] 1 seule ligne de la table affichée qui en contient plusieurs


Sujet :

JDBC Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 6
    Par défaut [jTable & HSQLDB] 1 seule ligne de la table affichée qui en contient plusieurs
    Bonjour à tous !

    Voici mon problème:
    Dans une jTable, je souhaite affiché les données contenue dans uen base local (HSQL) même principe qu'avec MYSQL.
    Cependant ma jTable n'affiche que la première ligne de ma table qui en contient 2. Ou est l'erreur?

    ## Application.java :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    ...
            CustomTableModel tab = new CustomTableModel(pilote,host,login,pw,sql);
            JTable T = new JTable(tab);
            T.setModel(tab);
            JScrollPane jsp= new JScrollPane(T);//ScrollPane
    ...

    ## CustomTableModel.java :
    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
     
    import java.sql.ResultSet;
    import java.sql.ResultSetMetaData;
    import java.util.Vector;
     
    import javax.swing.JOptionPane;
    import javax.swing.table.DefaultTableModel;
     
    public class CustomTableModel extends DefaultTableModel  {
     
        public static SQLExecuteQuery connexion;
        private ResultSetMetaData md;
        private int colonnes;
        public Vector data;
        private String[] columnNames;
     
        // DefaultTableModel has its own internal storage; use that   
        public CustomTableModel(String pilote,String host,String login,String pw,String query)  { 
            connexion = new SQLExecuteQuery(pilote,host,login,pw);
            connexion.setQuery(query);
            getHSQLdb();
        }
     
        public void getHSQLdb() {
            try {
                 ResultSet rs = connexion.getResultSet();
                 md = rs.getMetaData();
                 colonnes = md.getColumnCount();
                 System.out.println(colonnes);
                 columnNames = new String[colonnes];
                 for (int i = 0; i <= colonnes-1; i++) {
                     columnNames[i] = md.getColumnLabel(i+1);
                     super.addColumn(columnNames[i]);
                 }
     
                 // Get all rows.
                 System.out.println("Data:");
                 data = new Vector();
                 while (rs.next()) {
                     Vector newRow = new Vector();
                     for (int i = 1; i <= getColumnCount(); i++) {
                         newRow.addElement(rs.getObject(i));
                     }
                     data.addElement(newRow);
                     System.out.println(data);
                 }
                 super.addRow(data);
     
     
                 //fireTableDataChanged();
               } catch (Exception ex) {
                   JOptionPane.showMessageDialog(null, "Erreur : " + ex, "Warning", JOptionPane.ERROR_MESSAGE);
               }
        }
     
        public String getColumnName(int col) {
            return columnNames[col];
        }
     
        public Object getValueAt(int row, int col) {
            Vector vect = (Vector)data.elementAt(row);
            System.out.println(vect.elementAt(col));
            return vect.elementAt(col);
        }
     
        public boolean isCellEditable(int row,int column) {
            return true;
        }
     
        // let's use DefaultTableModel's own getRowCount implementation  
        // and getValueAt 
        // there is no clear method, so let's add this one    
        public void clear()  { 
            // setting the number of rows to 0 also clears the model 
            setRowCount(0); 
        } 
    }

  2. #2
    Expert confirmé
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Par défaut
    C'est normal. Tu appelles la méthode addRow une seule fois, tu ne vas donc ajouter qu'une seule ligne à ta table, en plus tu lui la valeur globale et non la valeur de la ligne.

    Essaie de supprimer ton appel à addRow et redéfinit la méthode getRowCount() pour donner toi-même le nombre de lignes de la table.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 6
    Par défaut
    SI je supprime mon appel à addRow()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    super.addRow(data);
    et que je redéfinis la méthode getRowCount() en donnant le nombre de ligne, automatiquement la méthode addRow() par défaut sera utilisée? pour ensuite afficher mes lignes?

    Merci pour ton aide en tout cas.

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 6
    Par défaut
    Super cela fonctionne, j'ai supprimé la méthode addRow() et ajouté la méthode getRowCount() au code

    public int getRowCount() {
    try {
    return data.size();
    }
    catch (Exception ex) {
    return 0;
    }
    }
    Remarque:
    public int getRowCount() {
    return data.size();
    }
    ne fonctionnait pas et me donnait une exception...

    Merci beaucoup à toi !!!

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 6
    Par défaut
    Je remets le code entier de cette classe pour ceux que çà pourrait aider.

    # class "Main" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    ...
    		tab = new CustomTableModel(pilote,host,login,pw,sql);
    		JTable T = new JTable(tab);
    		T.setModel(tab);
    		JScrollPane jsp= new JScrollPane(T);//ScrollPane
    # class "CustomTableModel" :
    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
     
    import java.sql.ResultSet;
    import java.sql.ResultSetMetaData;
    import java.util.Vector;
    import javax.swing.JOptionPane;
    import javax.swing.table.DefaultTableModel;
     
    public class CustomTableModel extends DefaultTableModel  {
     
    	public static SQLExecuteQuery connexion;
    	private ResultSetMetaData md;
    	private int colonnes;
    	public Vector data;
    	private String[] columnNames;
     
    	// DefaultTableModel has its own internal storage; use that    
    	public CustomTableModel(String pilote,String host,String login,String pw,String query)  {  
    		connexion = new SQLExecuteQuery(pilote,host,login,pw);
    		connexion.setQuery(query);
    		getHSQLdb();
    	}
     
    	public void getHSQLdb() {
    		try {
    	         ResultSet rs = connexion.getResultSet();
    	         md = rs.getMetaData();
    	         colonnes = md.getColumnCount();
    	         System.out.println(colonnes);
    	         columnNames = new String[colonnes];
    	         for (int i = 0; i <= colonnes-1; i++) {
    	        	 columnNames[i] = md.getColumnLabel(i+1);
    	        	 super.addColumn(columnNames[i]);
    	         }
     
    	         // Get all rows.
    	         System.out.println("Data:");
    	         data = new Vector();
    	         while (rs.next()) {
    	        	 Vector newRow = new Vector();
    	        	 for (int i = 1; i <= getColumnCount(); i++) {
    	        		 newRow.addElement(rs.getObject(i));
    	        	 }
    	        	 data.addElement(newRow);
    	        	 //System.out.println(data);
    	         }
    	       } catch (Exception ex) {
    	    	   JOptionPane.showMessageDialog(null, "Erreur : " + ex, "Warning", JOptionPane.ERROR_MESSAGE);
    	       }
    	}
     
    	public String getColumnName(int col) {
            return columnNames[col];
        } 
     
        public int getRowCount() {
        	try {
        	return data.size();
        	}
        	catch (Exception ex) {
        	return 0;
        	}
        }
     
    	public Object getValueAt(int row, int col) {
    		Vector vect = (Vector)data.elementAt(row);
    		System.out.println(vect.elementAt(col));
    	    return vect.elementAt(col);
    	}
     
    	public boolean isCellEditable(int row,int column) {
            return true;
        }
     
    	// let's use DefaultTableModel's own getRowCount implementation   
    	// and getValueAt  
    	// there is no clear method, so let's add this one     
    	public void clear()  {  
    		// setting the number of rows to 0 also clears the model  
    		setRowCount(0);
    	}
     
     
    }

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

Discussions similaires

  1. [JScrollPane] [JTable] Se placer à la dernière ligne
    Par wishnight dans le forum Composants
    Réponses: 9
    Dernier message: 24/12/2015, 18h42
  2. Bloquer une seule ligne d'une table
    Par pol2095 dans le forum Requêtes
    Réponses: 2
    Dernier message: 07/02/2011, 11h31
  3. [JTable] autoriser la sélection d'une seule ligne
    Par simla dans le forum Composants
    Réponses: 4
    Dernier message: 06/03/2008, 13h06
  4. [JTable]Selectionner une seule ligne d'une jTable ?
    Par Maximus32 dans le forum Composants
    Réponses: 2
    Dernier message: 22/10/2004, 02h06
  5. Réponses: 9
    Dernier message: 12/08/2002, 07h38

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