Afficher une JTable comprenant plusieurs table SQL

cedric774 Messages postés 21 Date d'inscription vendredi 14 mars 2008 Statut Membre Dernière intervention 2 octobre 2012 - 9 août 2010 à 17:32
cedric774 Messages postés 21 Date d'inscription vendredi 14 mars 2008 Statut Membre Dernière intervention 2 octobre 2012 - 18 août 2010 à 17:21
Bonjour à tous

je suis occupé sur un projet java où j'utilise une base de données où je fais des ajouts, modifications, suppression et donc je voudrais afficher une JTable qui affiche le résultat d'une requete sql utilisant plusieurs table access

Imaginons car mon exemple est plus long, que j'ai une table club qui comprend plusieurs champs dont un indice (identifiant) et un libellé, j'ai une autre table joueur qui comprend toutes les informations concernant un joueur (numero, nom, prenom, adresse, ... et le club dans lequel il est affilié)

donc la requête SQL donnerait :
Select j.Nom, j.Prenom, j.Club, c.Libelle
From Joueur j, Club c
Where c.Indice = j.Club
and j.Club = indiceClubChoisi;

Je voudrais donc trouver le moyen d'afficher cette JTable



je vous mets un exemple de méthode d'une requete et la classe de la JTableModel s'y rapportant dans le cas où je n'utilise qu'une seule table access

public Vector<Joueur> getAllJoueurs() throws PasIdentification, AllJoueursException 
{

Vector <Joueur> allJoueurs = new Vector <Joueur>();

try
{
Joueur joueur;
String instructionSQL = "select * from Joueur order by NumeroAffiliation";

PreparedStatement prepStat = MyConnection.getConnect().prepareStatement(instructionSQL);
ResultSet donnees = prepStat.executeQuery();

while(donnees.next())
{
joueur = new Joueur(donnees.getInt(1),donnees.getString(2),donnees.getString(3), new GregorianCalendar(), donnees.getString(5), donnees.getString(6), donnees.getString(7), donnees.getInt(8), donnees.getInt(9),donnees.getString(10), donnees.getBoolean(11), donnees.getString(12), donnees.getString(13));

joueur.getDateNaiss().setTime(donnees.getDate(4));
allJoueurs.add(joueur);
}
}
catch(SQLException e)
{
throw new AllJoueursException(e.getMessage());
}
return allJoueurs;
}


et voilà la classe qui crée la JTable

package Model;

import java.util.Date;
import java.util.Vector;

import javax.swing.table.AbstractTableModel;

public class AllJoueursModel extends AbstractTableModel
{
private Vector<String> columnNames = new Vector<String>();
private Vector<Joueur> vectJoueur = new Vector<Joueur>();

public AllJoueursModel(Vector<Joueur> vectAllJoueurs)
{
vectJoueur = vectAllJoueurs;

columnNames.add("Numero affiliation");
columnNames.add("Nom");
columnNames.add("Prenom");
columnNames.add("Date naissance");
columnNames.add("Nationalite");
columnNames.add("Classement");
columnNames.add("Nom rue");
columnNames.add("Num rue");
columnNames.add("Code postal");
columnNames.add("Localite");
columnNames.add("Droitier");
columnNames.add("Club");
columnNames.add("Fonction");		
}

public int getColumnCount() 
{
return columnNames.size();
}

public int getRowCount()
{
return vectJoueur.size();
}

public String getColumnName(int col)
{
return columnNames.elementAt(col); 
}

public Object getValueAt(int row, int col) 
{
Joueur j = vectJoueur.elementAt(row);
switch (col)
{
case 0 : return j.getAffiliation();
case 1 : return j.getNom();	
case 2 : return j.getPrenom();
case 3 : return j.getDateNaiss().getTime();
case 4 : return j.getNationalite();
case 5 : return j.getClassement();
case 6 : return j.getNomRue();
case 7 : return j.getNumeroRue();
case 8 : return j.getCodePostal();
case 9 : return j.getLocalite();
case 10: return j.getDroitier();
case 11: return j.getClub();
case 12: return j.getFonction();
default: return null;
}
}	

public Class<?> getColumnClass(int col)
{	
Class c = Integer.class;
switch (col)
{
case 0 : c = Integer.class; break;
case 1 : c = String.class; break;
case 2 : c = String.class; break;
case 3 : c = Date.class; break;
case 4 : c = String.class; break;
case 5 : c = String.class; break;
case 6 : c = String.class; break;
case 7 : c = Integer.class; break;
case 8 : c = Integer.class; break;
case 9 : c = String.class; break;
case 10: c = Boolean.class; break;
case 11: c = String.class; break;
case 12: c = String.class; break;
}
return c;
}

public Joueur getJoueurAtLine (int i)
{
return vectJoueur.elementAt(i);
}
}




PS : indiceClubChoisi étant obtenu par une JComboBox
PS 1 : A chaque table SQL correspond un objet, d'où le Joueur joueur et c'est pareil pour le club


si vous avez des questions sur le code, n'hesitez pas car je tourne en rond à tenter de trouver le moyen tout en suivant la logique que j'ai respecté

2 réponses

cedric774 Messages postés 21 Date d'inscription vendredi 14 mars 2008 Statut Membre Dernière intervention 2 octobre 2012
11 août 2010 à 14:54
y'a t'il quelqu'un qui pourrait m'aider svp

car je continue à réfléchir mais je dois admettre que je ne vois pas du tout comment faire

je vais donner un peu plus d'informations peut-être que ca vous aidera à me comprendre


j'ai créé moi-même les classes Joueur et Club où on y retrouve constructeurs, les méthodes get() pour chaque attribut, toString()

et je cherche effectivement à créer la JTable de la requete, et c'est là mon problème

bon je fais essayer de mettre toutes les étapes que je fais, vous me direz si vous auriez fait la même chose :

1)
contrairement à ce que je fais pour la méthode
public vector<Joueur> getAllJoueurs() ... {

je devrais faire :
public vector<Object> getInfos() ... {

2)
Je crée un vecteur d'object
> Vector<Object> vect new Vector<Object>();

3) je fais le try/catch

4) j'y insère la requête, le PreparedStatement et le ResultSet

5) ensuite
while(donnees.next())
{
// Souci que dois-je mettre avant de spécifier le type des données??
?? = new ??? (donnees.getString(1), ...);
vect.add(??);
}

6) je termine par mon catch



ensuite dans l'autre classe


..

public TableModel(Vector<Object> vect)
{
// je donne un nom aux différentes colonnes de la JTable


les méthodes
- getColumnCount()
- getRowCount()
- getColumnName(int col)

ne doivent pas varier

par contre la méthode getValueAt(int row, int col) j'essaie différents truc, je ne vois pas comment je dois faire

getColumnClass(int col), je spécifie le type des données que contiendra les colonnes, y'a pas de souci


voilà j'espere avoir été clair, maintenant si vous avez une résolution, je veux bien évidemment la tester
0
cedric774 Messages postés 21 Date d'inscription vendredi 14 mars 2008 Statut Membre Dernière intervention 2 octobre 2012
18 août 2010 à 17:21
on peut clore, j'ai su trouver la solution
0
Rejoignez-nous