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 :

[JTable] afficher et remplir à partir d'une requete


Sujet :

Composants Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Chef de projet
    Inscrit en
    Mai 2008
    Messages
    211
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chef de projet

    Informations forums :
    Inscription : Mai 2008
    Messages : 211
    Par défaut [JTable] afficher et remplir à partir d'une requete
    bonjour, j'ai un probleme avec l'affichage de Jtable lors de l'exection de l'application normalement elle doit m'afficher le resultat d'une requete sql mais la table est vide et j'ai essayer le meme code de connexion de ma Jtable dans un nouveau projet é ca marche mais lorsque je l'integre dans l'application rien n'est afficher.
    voici le code si quelqu'un peut le tester et me donner une idée vraiment je suis coincé depuis 4 jours et j'ai pas pu résoudre le problème.merci d'avance .


    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
    class CachingResultSetTableModel extends ResultSetTableModel
    {  public CachingResultSetTableModel(ResultSet aResultSet)
       {  super(aResultSet);
          try
          {  cache = new ArrayList();
             int cols = getColumnCount();
             ResultSet rs = getResultSet();
     
             /* place all data in an array list of Object[] arrays
                We don't use an Object[][] because we don't know
                how many rows are in the result set
             */
     
             while (rs.next())
             {  Object[] row = new Object[cols];
                for (int j = 0; j < row.length; j++)
                   row[j] = rs.getObject(j + 1);
                cache.add(row);
             }
          }
          catch(SQLException e)
          {  System.out.println("Error " + e);
          }
       }
     
       public Object getValueAt(int r, int c)
       {  if (r < cache.size())
             return ((Object[])cache.get(r))[c];
          else
             return null;
       }
     
       public int getRowCount()
       {  return cache.size();
       }
     
       private ArrayList cache;
    }
    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
    import java.sql.ResultSet;
     
    import java.sql.ResultSetMetaData;
    import java.sql.SQLException;
     
    import javax.swing.table.AbstractTableModel;
     
    abstract class ResultSetTableModel extends AbstractTableModel
    {  public ResultSetTableModel(ResultSet aResultSet)
       {  rs = aResultSet;
          try
          {  rsmd = rs.getMetaData();
          }
          catch(SQLException e)
          {  System.out.println("Error " + e);
          }
       }
     
       public String getColumnName(int c)
       {  try
          {  return rsmd.getColumnName(c+1);
          }
          catch(SQLException e)
          {  System.out.println("Error " + e);
             return "";
          }
       }
     
       public int getColumnCount()
       {  try
          {  return rsmd.getColumnCount();
          }
          catch(SQLException e)
          {  System.out.println("Error " + e);
             return 0;
          }
       }
     
       protected ResultSet getResultSet()
       {  return rs;
       }
     
       private ResultSet rs;
       private ResultSetMetaData rsmd;
    }
    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
    import java.sql.ResultSet;
    import java.sql.SQLException;
     
    class ScrollingResultSetTableModel extends ResultSetTableModel
    {  public ScrollingResultSetTableModel(ResultSet aResultSet)
       {  super(aResultSet);
       }
     
       public Object getValueAt(int r, int c)
       {  try
          {  ResultSet rs = getResultSet();
             rs.absolute(r + 1);
             return rs.getObject(c + 1);
          }
          catch(SQLException e)
          {  System.out.println("Error " + e);
             return null;
          }
       }
     
       public int getRowCount()
       {  try
          {  ResultSet rs = getResultSet();
             rs.last();
             return rs.getRow();
          }
          catch(SQLException e)
          {  System.out.println("Error " + e);
             return 0;
          }
       }
    }
    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
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
     
     
     
    import java.awt.BorderLayout;
    import java.awt.Dimension;
    import java.awt.Rectangle;
    import java.awt.ScrollPane;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
     
    import java.sql.Connection;
    import java.sql.DatabaseMetaData;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.SQLException;
     
    import java.sql.Statement;
     
    import javax.swing.ImageIcon;
    import javax.swing.JButton;
    import javax.swing.JCheckBox;
    import javax.swing.JComboBox;
    import javax.swing.JEditorPane;
    import javax.swing.JFormattedTextField;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JList;
    import javax.swing.JMenu;
    import javax.swing.JMenuBar;
    import javax.swing.JMenuItem;
    import javax.swing.JPanel;
    import javax.swing.JScrollBar;
    import javax.swing.JScrollPane;
    import javax.swing.JTable;
    import javax.swing.JTextField;
    import javax.swing.JToolBar;
     
    public class Ratiotest extends JFrame {
        private BorderLayout layoutMain = new BorderLayout();
     
       private JScrollPane scrollPane;
     
        private ResultSetTableModel model;
        private JPanel panelCenter = new JPanel();
        private JMenuBar menuBar = new JMenuBar();
        private JMenu menuFile = new JMenu();
        private JMenuItem menuFileExit = new JMenuItem();
        private JToolBar toolBar = new JToolBar();
        private JButton buttonOpen = new JButton();
        private JButton buttonClose = new JButton();
        private JButton buttonHelp = new JButton();
        private ImageIcon imageOpen = new ImageIcon(ratio.class.getResource("openfile.gif"));
        private ImageIcon imageClose = new ImageIcon(ratio.class.getResource("closefile.gif"));
        private ImageIcon imageHelp = new ImageIcon(ratio.class.getResource("help.gif"));
        private JLabel jLabel1 = new JLabel();
        private JTextField jTextField1 = new JTextField();
        private JTextField jTextField2 = new JTextField();
        private JLabel jLabel2 = new JLabel();
        private JComboBox jComboBox1 = new JComboBox();
        private ResultSet rs;
        private Connection con;
        private Statement stmt;
        private static boolean SCROLLABLE = false;
        private JTextField jTextField3 = new JTextField();
        private JTable jTable1 = new JTable();
     
     
        public Ratiotest() {
            try {
                jbInit();
            } catch (Exception e) {
                e.printStackTrace();
            }
     
     
            try
            {  Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
                  // force loading of driver
               String url = "jdbc:odbc:dbFinJan08";
               String user = "";
               String password = "";
                    con = DriverManager.getConnection(url, user,
                       password);
     
                       stmt = con.createStatement();
     
                   DatabaseMetaData md = con.getMetaData();
                String sql = "SELECT Name\n" + 
                "FROM Geo INNER JOIN GeoNames ON Geo.ID = GeoNames.ID where Geo.GeoLevel=3 ;\n";
                    ResultSet mrs = stmt.executeQuery( sql );
                    while (mrs.next()){
                         //  System.out.println(mrs.getString(1));
                       jComboBox1.addItem(mrs.getString(1));
                    }
                     //mrs.close();
     
            }
            catch(ClassNotFoundException e)
            { 
            System.out.println("Error " + e);
            }
            catch(SQLException e)
            {  System.out.println("Error " + e);
            }
        }
     
        private void jbInit() throws Exception {
            this.setJMenuBar( menuBar );
            this.getContentPane().setLayout( layoutMain );
            panelCenter.setLayout( null );
            this.setSize(new Dimension(661, 509));
            menuFile.setText( "File" );
            menuFileExit.setText( "Exit" );
            menuFileExit.addActionListener( new ActionListener() { public void actionPerformed( ActionEvent ae ) { fileExit_ActionPerformed( ae ); } } );
            buttonOpen.setToolTipText( "Open File" );
            buttonOpen.setIcon( imageOpen );
            buttonClose.setToolTipText( "Close File" );
            buttonClose.setIcon( imageClose );
            buttonHelp.setToolTipText( "About" );
            buttonHelp.setIcon( imageHelp );
            jLabel1.setText("Date Début");
            jLabel1.setBounds(new Rectangle(5, 20, 115, 30));
            jTextField1.setBounds(new Rectangle(130, 20, 120, 30));
            jTextField2.setBounds(new Rectangle(130, 65, 120, 30));
            jLabel2.setText("Date Fin");
            jLabel2.setBounds(new Rectangle(5, 65, 115, 30));
            jComboBox1.setBounds(new Rectangle(270, 20, 120, 35));
            jComboBox1.addActionListener(new ActionListener() {
                        public void actionPerformed(ActionEvent e) {
                            jComboBox1_actionPerformed(e);
                        }
                    });
            jTextField3.setBounds(new Rectangle(5, 120, 125, 30));
            jTextField3.addActionListener(new ActionListener() {
                        public void actionPerformed(ActionEvent e) {
                         //   jTextField3_actionPerformed(e);
                          //jTextField3.setText((String)jComboBox1.getSelectedItem());
                        }
                    });
            jTable1.setBounds(new Rectangle(115, 200, 320, 115));
            menuFile.add( menuFileExit );
            menuBar.add( menuFile );
            toolBar.add( buttonOpen );
            toolBar.add( buttonClose );
            toolBar.add( buttonHelp );
            this.getContentPane().add( toolBar, BorderLayout.NORTH );
     
          //  scrollPane.getViewport().add(jTable1, null);
            panelCenter.add(jTable1, null);
            panelCenter.add(jTextField3, null);
            panelCenter.add(jComboBox1, null);
            panelCenter.add(jLabel2, null);
            panelCenter.add(jTextField2, null);
            panelCenter.add(jTextField1, null);
            panelCenter.add(jLabel1, null);
            this.getContentPane().add(panelCenter, BorderLayout.CENTER);
        }
     
        void fileExit_ActionPerformed(ActionEvent e) {
            System.exit(0);
        }
        public void actionPerformed(ActionEvent evt)
      {  if (evt.getSource() == jComboBox1)
          {  // show the selected table from the combo box
     
      if (scrollPane != null)
         getContentPane().remove(scrollPane);
     
      try
      {  String tableName
            = (String)jComboBox1.getSelectedItem();
        // if (rs != null) rs.close();
         String query = "SELECT Sum(ClientTrack.Amount) AS SumOfAmount,Count(ClientTrack.Client) AS CountOfClients  FROM ((ClientTrack INNER JOIN Loan ON ClientTrack.Loan = Loan.ID) INNER JOIN Table_essai ON Loan.Location = Table_essai.Souszone) INNER JOIN GeoNames ON Table_essai.Zone = GeoNames.ID where Name='"+tableName+"'" ;
         rs = stmt.executeQuery(query);
         if (SCROLLABLE)
            model = new ScrollingResultSetTableModel(rs);
         else
            model = new CachingResultSetTableModel(rs);
     
         JTable jTable1 = new JTable(model);
     
      }
      catch(SQLException e)
      {  System.out.println("Error " + e);
      }
               catch(Exception e) {
                System.out.print("erreur1 "+e.getMessage());//récuperer le message d'erreur en cas d'erreur
               }
           }
        }
        public static void main(String args[]){
            Ratiotest rati=new Ratiotest();
           rati.show();
     
        }
     
        private void jComboBox1_actionPerformed(ActionEvent e) {
            jTextField3.setText((String)jComboBox1.getSelectedItem());
        }
     
        private void jFormattedTextField1_actionPerformed(ActionEvent e) {
     
            }
     
        private void jTextField3_actionPerformed(ActionEvent e) {
        }
    }

  2. #2
    Membre confirmé
    Étudiant
    Inscrit en
    Janvier 2008
    Messages
    137
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2008
    Messages : 137
    Par défaut
    j'avait le meme problème dès une semaine mais j'ai éssayer de le résoudre par

    les classe suivantes :

    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
     
    import java.sql.SQLException;
    import java.util.ArrayList;
    import javax.swing.JScrollPane;
    import javax.swing.JTable;
    import javax.swing.table.DefaultTableModel;
     
    public class tableinitiale {
     
    	  ArrayList t1=new ArrayList();
    	  ArrayList t2=new ArrayList();
    	  ArrayList t3=new ArrayList();
     
    	  DefaultTableModel model;
    	  JScrollPane scroll=new JScrollPane();
    	  JTable tableau =null;
    	  int nbProduit=0;
     
    	public tableinitiale(String req){
     
     
     	        Connect resultat = new Connect(req,1,"BaseDeDonnées"); 
     
          try{  
     
    	         while(resultat.resultat.next())
     
    	         {				  				
    	             nbProduit++;
    			     t1.add(resultat.resultat.getString(1));
    	             t2.add(null);
    	             t3.add(null);
    	         }
     
    	        resultat.conn.close(); 
     
    	        }catch(SQLException e) { 
    		    	  e.printStackTrace(); 
    	    	 }
     
                      model=new DefaultTableModel(){
     
     
              	      public boolean isCellEditable(int row, int col){ 
              		  if (col==0) {return false;} 
              		   else {return true; }
     
              	     }
                  };            
                model.addColumn("   Colonne 1  ",t1.toArray());
                model.addColumn(" Colonne 2 ",t2.toArray());
                model.addColumn(" Colonne 3 ",t3.toArray());
     
    	        tableau = new table(model);
     
     
    			scroll.setBounds(20,20,700,400);
    			scroll.setViewportView(tableau);
        }
    }

    avec la classe Connect est défini par :
    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
    import java.sql.*;
    import java.util.*;
     
    public class Connect {
     
    	ResultSet resultat=null;
    	Connection conn;
    	Statement requete;
    	 public  Connect(String req,int a,String base){
     
    		try {  			 
    			  Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
    			  String url="jdbc:odbc:"+base;
    		      conn = DriverManager.getConnection(url); 		   
    			  requete= conn.createStatement();	
    			  if(a==1)
    			  resultat=requete.executeQuery(req);
    			  else if(a==2)
    			  requete.executeUpdate(req);
     
    		 } 
    		      catch(ClassNotFoundException e) { 
    			    System.err.println("Driver non chargé !"); 
    			    e.printStackTrace(); 
    		    }
    		      catch(SQLException e) { 
    		    	  e.printStackTrace(); 
    	    	 } 	
     
    		}
    }

    exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     tableinitiale table1 = new tableinitiale(" SELECT ref_produit FROM produits WHERE type_produit='prod1'");

  3. #3
    Membre éclairé Avatar de guitariste
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    245
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 245
    Par défaut
    salut ouchemhou
    je me demande c'est quoi la classe table que tu utilise dans ce code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tableau = new table(model);
    ?

    je pense bien que c'est une JTable.

    j'ai fais cette remarque parceque ces classes m'interessent..mais mon probleme c'est que j'ai maintenant un objet de type "tableinitiale" ....comment je peux l'utiliser maintenant ...je ne peux pas par exemple l'ajouter sur un JPanel...

  4. #4
    Membre confirmé
    Étudiant
    Inscrit en
    Janvier 2008
    Messages
    137
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2008
    Messages : 137
    Par défaut
    merci guitariste pour cette remarque j'ai oublié ça
    en fait c'est une classe qu'herite une 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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    import java.sql.*;
    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;
    import java.lang.*;
    import javax.swing.table.*;
     
    public class table extends JTable{
     
     
         public table(DefaultTableModel model) {
     
     
     
    	    	setModel(model); 
    	    	setAutoCreateRowSorter(true);
    	    	setColumnSelectionInterval(1, 1);
    		setRowSelectionInterval(0, 0);
     
     
        	 Image img=Toolkit.getDefaultToolkit().getImage("images\\curseurs\\plus.gif");
        	 Point p=new Point(15,15);
        	 Cursor curs=Toolkit.getDefaultToolkit().createCustomCursor(img,p, "x");
             setCursor(curs); 
     
         }		
     }
    et une fois que vous avez fait une instance de tableinitiale

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     tableinitiale table1 = new tableinitiale(" SELECT ref_produit FROM produits WHERE type_produit='prod1'");
    et si vous avez remarqué ,la table à été ajouté au scroll dans la tableinitiale

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    scroll.setViewportView(tableau);
    il suffit de faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    JPanel panel=new JPanel(); 
     panel.add(table1.scroll);

  5. #5
    Membre éclairé Avatar de guitariste
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    245
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 245
    Par défaut
    salut ouchemhou
    oui c'est ce que je croyais aussi.
    merci pour votre réponse a ma bête question
    ça vient peut être du fait que je suis habitué avec les getters en cas où je veux récupérer un attribut de ma classe...
    en tout cas j'utilise maintenant votre classe avec des modifications( j'espère que cela ne vous gène pas )
    Merci

  6. #6
    Membre confirmé
    Étudiant
    Inscrit en
    Janvier 2008
    Messages
    137
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2008
    Messages : 137
    Par défaut
    salut guitariste

    votre question n'est pas une bête question,on est ici pour apprendre et bravo
    car vous avez bien copris ces classes , et si vous avez des problèmes n'hésitez pas .

Discussions similaires

  1. [JTable] Remplir à partir d'une requete
    Par abdelmajid_daosabah dans le forum Composants
    Réponses: 8
    Dernier message: 22/05/2011, 12h09
  2. Rempli et Afficher Jtable A Partir D'une Requete
    Par the watcher dans le forum API standards et tierces
    Réponses: 2
    Dernier message: 04/05/2010, 11h08
  3. Réponses: 1
    Dernier message: 28/04/2009, 02h12
  4. remplir un Jtree à partir d'une requete SQL
    Par opensource dans le forum SQL
    Réponses: 5
    Dernier message: 21/01/2008, 17h25
  5. [SQL] Remplir à partir d'une requete SQL
    Par GarsDuCalvados dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 18/09/2007, 10h41

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