Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1710 connectés 

  FORUM HardWare.fr
  Programmation

  [JAVA] Insérer le résultat d'une requete sql (ResultSet) dans 1 JTABLE

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[JAVA] Insérer le résultat d'une requete sql (ResultSet) dans 1 JTABLE

n°97567
Roco
Posté le 06-02-2002 à 19:54:20  profilanswer
 

Bonjour :hello:  
 
J'ai recherché sur gogole.fr et sur mes moteurs préférés, mais je n'ai pas trouvé de méthode assez simples pour que mon intelligence limitée puis comprendre... :heink:  donc je fais appel à vous mes chers pédagogues :D  
 
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.Box.*;
import javax.swing.table.*;
import java.sql.*;
 
public class Etat extends JPanel
{  
 public static JPanel PanelPrincipal, PanelSecondaire;
 public static JScrollPane Defilement;
 public static JTable Tableau;
 public static JButton Afficher;
 
 
 public Etat()
 {
  //Méthodes appliquées à la Fenetre
  setPreferredSize(new Dimension (780,540));
  setBorder(BorderFactory.createTitledBorder("Etat du stock" ));
  setLayout(new BorderLayout());
   
  //Création des éléments
   
   //Création des panels
   PanelPrincipal=new JPanel();
   add(PanelPrincipal,BorderLayout.NORTH);
   PanelSecondaire=new JPanel();
   add(PanelSecondaire,BorderLayout.CENTER);
   
   //Création du bouton
   Afficher=new JButton("Afficher" );
   PanelPrincipal.add(Afficher);
   Afficher.addActionListener(new ActionListener() {
   public void actionPerformed(ActionEvent e)
   {
    System.out.println("Validation" );
    try  
    {
     Class.forName("sun.jdbc.odbc.JdbcOdbcDriver
" );
    }
   
    catch(java.lang.ClassNotFoundException et)  
    {
            System.err.print("ClassNotFoundException: " );
            System.err.println(et.getMessage());
       }
   
     try  
    {  
     Connection con=DriverManager.getConnection("jdbc:odbc:vente" );
   
     Statement stmt=con.createStatement();
   
     ResultSet rs=stmt.executeQuery("SELECT numero_objet,denomination,type,prix FROM objet" );  
     
     while(rs.next())
     {
     String numero_objet=rs.getString("numero_objet" );
     String denomination=rs.getString("denomination" );
     String type=rs.getString("type" );
     String prix=rs.getString("prix" );
     
     System.out.println(numero_objet);
     System.out.println(denomination);
     System.out.println(type);
     System.out.println(prix);
 
     }
     
     con.close();
       }  
    catch(SQLException ex)  
    {
            System.err.println("SQLException: " + ex.getMessage());
       }  
   }
   });
   
   //Création du défileur
   Defilement=new JScrollPane(Tableau);
   /*table.setPreferredScrollableViewportSize(new Dimension(500, 70));*/
   PanelSecondaire.add(Defilement);
   
   //Création de la table
   Tableau=new JTable();
 }
}
 
Je voudrais que mon rs s'affiche dans mon chtit tableau, apparement fo passer par un modèle, mais jcomprends pas bien...

mood
Publicité
Posté le 06-02-2002 à 19:54:20  profilanswer
 

n°97622
Roco
Posté le 07-02-2002 à 00:02:22  profilanswer
 

c bon...

n°97712
darklord22
Nightwish rulezzzzzzzzzzzzz
Posté le 07-02-2002 à 12:14:41  profilanswer
 

Roco a écrit a écrit :

c bon...  




 
 :??:


---------------
What is popular is not always right, what is right is not always popular :D
n°97816
gfive
Posté le 07-02-2002 à 15:33:34  profilanswer
 

c bon quoi?? T'as compris??

n°97830
Roco
Posté le 07-02-2002 à 15:52:31  profilanswer
 

Oui merci... :jap:  
 
J'ai réussi ce que je voulais faire,en pompant/adaptant un script que j'ai trouvé sur le net... :heink:  
 
Mais je ne suis totalement compris le système... :(  
 
Si quelqu'un à un script bien commenté pour faire passer mon ResultSet dans un JTable, chui preneur ! :)

n°97833
Roco
Posté le 07-02-2002 à 15:54:44  profilanswer
 

oulà j'ai du mal avec mes posts...
 
Je voulais dire que je n'avais pas très bien compris le script (en fait je me suis contenter de le pomper...) et que donc si quelqu'un avait un script bien commenté à me passer ce serait kool !
 
OUF, moi y'en a pas savoir parler ! :pt1cable:

n°97866
gfive
Posté le 07-02-2002 à 16:30:02  profilanswer
 

Bon, d'abord, on dit pas un script, nondidiou!! :D
 
Bon, alors, le principe est relativement simple...
Le JTable, c'est jamais que du graphique...
Le JTableModel, comme son nom l'indique, c'est le modèle....
 
En gros, la JTable dessine les données contenues dans un objet basé sur le modèle....Quand tu demandes à la JTable de dessiner, elle demande au modèle les données à dessiner pour chaque cellule, elle ne se préoccupe absolument pas de savoir comment le modèle gère les données, ça la regarde pas....
 
Donc, tu dois récupérer les données de la base dans un objet qui implémente l'interface TableModel (ou qui étend DefaultTableModel, qui est l'implémentation de base du TableModel). Ensuite, tu passes le modèle à la JTable :
 
JTable matable = new JTable(monmodèle)
 
et le tour est joué!!  
Pour des exemples simples de code, le mieux est d'aller sur le site de sun (http://developper.java.sun.com) et de chercher les tutoriaux Swing..
 
(Les puristes, scusez moi, je me souviens jamais complètement de comment on explique un design pattern :D)

n°97885
Roco
Posté le 07-02-2002 à 16:51:15  profilanswer
 

Oui d'accord, alors je reformule ma question :
 
Comment insérer les données contenues dans un ResultSet dans un JTableModel.

n°97898
gfive
Posté le 07-02-2002 à 17:07:51  profilanswer
 

Bon.....Voilà les signatures des méthodes de l'interface TableModel...
 
 
<font color="#0000FF"> void addTableModelListener(TableModelListener l)</font>
          Adds a listener to the list that is notified each time a change to the data model occurs.
(normalement, ta JTable doit être ModelListener de ton modèle...donc, après l'instantiation : monmodèle.addTableModelListener(matable);
 
<font color="#0000FF">Class getColumnClass(int columnIndex)</font>
          Returns the most specific superclass for all the cell values in the column.
(Ici, pour chacune de tes colonnes, tu peux spécifier la classe des objets. Très pratique si tu veux changer la façon de  les dessiner)
 
 <font color="#0000FF">int getColumnCount()</font>
          Returns the number of columns in the model.
Retourne le nombre de colonnes.
 
 
<font  color="#0000FF">String getColumnName(int columnIndex)</font>
          Returns the name of the column at columnIndex.
Les noms retournées par cette méthode en fonction de l'indice de colonne seront utilisés pour les entêtes de colonnes.  
 
 
<font  color="#0000FF">int getRowCount()</font>
          Returns the number of rows in the model.
Retourne le nombre de lignes...
 
 
<font color="#0000FF">Object getValueAt(int rowIndex, int columnIndex)</font>
          Returns the value for the cell at columnIndex and rowIndex.
Cette méthode est utilisée par la JTable pour savoir quoi mettre dans quelle cellule.
 
 
<font color="#0000FF"> boolean isCellEditable(int rowIndex, int columnIndex)</font>
          Returns true if the cell at rowIndex and columnIndex is editable.
Pour chaque cellule, si cette méthode répond 'true', le contenu de la cellule ser éditable
 
 
<font color="#0000FF"> void removeTableModelListener(TableModelListener l)</font>
          Removes a listener from the list that is notified each time a change to the data model occurs.
 
 
<font color="#0000FF">void setValueAt(Object aValue, int rowIndex, int columnIndex)</font>
          Sets the value in the cell at columnIndex and rowIndex to aValue.
 Utilisé par la JTable popur changer la valeur d'une colonne éditable...
 
 
L'idée, c'est que tu consrtuis un objet qui cointient les données de ton ResultSet, ou même qui encapluse ton resultSet, et qui implémente ces méthodes, pus, tu écr(is le code des méthodes, et c'est tout.....

n°97900
gfive
Posté le 07-02-2002 à 17:10:41  profilanswer
 

Et merde, comment on écrit en couleur??? :D:D

mood
Publicité
Posté le 07-02-2002 à 17:10:41  profilanswer
 

n°98025
Roco
Posté le 07-02-2002 à 23:08:43  profilanswer
 

Bon j'ai mon prog :
 
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.Box.*;
import javax.swing.table.*;
import java.sql.*;
public class Etat extends JPanel
{  
 public static JPanel PanelPrincipal, PanelSecondaire;
 public static JScrollPane Defilement;
 public static JTable Tableau;
 public static JButton Afficher;
 DefaultTableModel TabModel;
 public Etat()  
 {
  //Méthodes appliquées à la Fenetre
  setPreferredSize(new Dimension (780,540));
  setBorder(BorderFactory.createTitledBorder("Etat du stock" ));
  //Création des éléments
  String[] columnNames = {"Numéro de l'objet", "Dénomination", "Type", "Prix"};  
  //Création de la table
  Tableau = new JTable();
  Tableau.setPreferredScrollableViewportSize(new Dimension(740,480));
  TabModel = (DefaultTableModel) Tableau.getModel();
  TabModel.setColumnIdentifiers(columnNames);
  Tableau.setModel(TabModel);
  //Création du défileur
  Defilement=new JScrollPane(Tableau);;
  add(Defilement);
 }
 void refresh()  
 {
  Tableau.removeEditor();
  try {
   Class.forName("sun.jdbc.odbc.JdbcOdbcDriver" );
  } catch(java.lang.ClassNotFoundException et) {
          System.err.print("ClassNotFoundException: " );
          System.err.println(et.getMessage());
      }
   
   try {  
    Connection con=DriverManager.getConnection("jdbc:odbc:vente" );
    Statement stmt=con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
    ResultSet rs=stmt.executeQuery("SELECT numero_objet,denomination,type,prix FROM objet" );  
 
    java.sql.ResultSetMetaData rsmd = rs.getMetaData();
      int colNo = rsmd.getColumnCount();
    while(rs.next())
    {
     Object[] ligne = new Object[colNo];
     for(int i = 0; i < colNo; i++){
      ligne[i] = rs.getObject(i + 1);
       }
     TabModel.addRow(ligne);
    }
    con.close();
     } catch(SQLException ex) {
          System.err.println("SQLException: " + ex.getMessage());
     }  
 }
}
 
et je l'appelle dans cette fonction ds mon prog avec le main :
 
Consultation.addActionListener(new ActionListener() {
   public void actionPerformed(ActionEvent e)
   {
    System.out.println("Consultation" );
    CadreConsultation.setVisible(true);
    CadreConsultation.refresh();
    CadreAjout.setVisible(false);
    CadreSuppr.setVisible(false);
   }
  });
 
 
Seulement, voilà y'a un pb c'est que quand je retourne dessus, il me réécrit une nouvelle fois le contenu de la requete dans le JTable au dessous du contenu de la précedente requete... ARGH!!!
 
L'intégralité de mon projet, bdd comprise est en zip sur :
http://eric.ledonge.free.fr/archives/Projetbdd.zip
Fo juste penser à créer une connexion ODBC nommé 'vente'
 
Voilà I NEED HELP !!!

n°98049
gfive
Posté le 08-02-2002 à 00:15:00  profilanswer
 

Déjà, les composant graphiques en static....C douteux!! C'est la première fois que tu programmes en objet??
 
Bon, sinon, c'est normal qu'il te rajoute les lignes à chaque fois que tu réaffiches : tu fais les model.addRow(...); qui ajoutent les lignes à ton modèle, dans le corps de la éthode refresh....qui est appellée, comme son nom l'indique, quand ton composant est rafraichi....Donc, à chaque rafraichissement, i reajoute les lignes....

n°98092
Roco
Posté le 08-02-2002 à 10:14:29  profilanswer
 

Oui et donc jfais comment?

n°98187
gfive
Posté le 08-02-2002 à 14:29:20  profilanswer
 

Ben....on va pas te le faire, non plus, ton machin....c pas si compliqué que ça...lis les docs, télécharge le Swing Tutorial chez Sun, et réfléchis un peu!! Vu comment c'est codé, ton machin, t'as pas réfléchi des masses jusqu'à présent, donc, hop, au boulot!


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation

  [JAVA] Insérer le résultat d'une requete sql (ResultSet) dans 1 JTABLE

 

Sujets relatifs
[Java] TextField[Java] - Double buffering ?
[C]Insérer la valeur d'une variable au milieu d'une chaine de caracter[Java] question philosophique (?)
2D sous JAVA[Java] Liste des fonctions et méthodes
[PHP] Variable dynamique et bouclage de requêteJava -> Javascript
Démineur en java avec swing[JAVA]: Lever une exception d'un constructeur?
Plus de sujets relatifs à : [JAVA] Insérer le résultat d'une requete sql (ResultSet) dans 1 JTABLE


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR