Afficher une JTable comprenant plusieurs table SQL
cedric774
Messages postés21Date d'inscriptionvendredi 14 mars 2008StatutMembreDernière intervention 2 octobre 2012
-
9 août 2010 à 17:32
cedric774
Messages postés21Date d'inscriptionvendredi 14 mars 2008StatutMembreDerniè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é
cedric774
Messages postés21Date d'inscriptionvendredi 14 mars 2008StatutMembreDerniè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