requete SQL jointure, TableView, lambda expressions
slt la cpie, tjs moi
Comment fait on pr, via les expressions lambda, afficher ds 1 TableView le résultat d'1 requete SQL avec jointure?
J'ai 4 observableList ds ma class (F03_controller.java)
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13
|
// contient le retour de test01_()
ObservableList<ObservableList<String>> list_;
// Les 3 suivantes servent ds la methode test01_()
// contient les 2 ObservableList qui suivent
ObservableList<ObservableList<String>> liste_testGeneral_ = FXCollections.observableArrayList();
// contient le titre des livres empruntés
ObservableList<String> liste_test01_ = FXCollections.observableArrayList();
// contient le prenom des emprunteurs
ObservableList<String> liste_test02_ = FXCollections.observableArrayList(); |
La méthode test01_() qui
- possède et execute la requete SQL
- remplit liste_test01_ avec le titre des livres empruntés
- remplit liste_test02_ avec le nom des emprunteurs
- remplit liste_testGeneral avec les 2 précédentes
- retourne la liste liste_testGeneral_
Code:
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
|
public ObservableList<ObservableList<String>> test01_() {
System.out.println("fichier: F03_emprunt_controller.java");
System.out.println("methode: test01_()");
// les variables
String selectQuerytest01_;
Connection contest01_;
PreparedStatement p_stmttest01_;
ResultSet rstest01_;
// redact° de la requete
selectQuerytest01_ = "SELECT client.prenom, livre.titre\n"
+ "FROM client, livre\n"
+ "INNER JOIN emprunt\n"
+ "WHERE client.id_abonne = emprunt.id_abonne\n"
+ "AND emprunt.id_livre = livre.id_livre";
// initialisat° de la variable de type Connection
// obtenir la connex° grâce à la classe Connexion
contest01_ = Connexion.getCon();
try {
// initialisat° d'1 variable de type
// PreparedStatement
// prépare la requete
p_stmttest01_ = contest01_.prepareStatement(selectQuerytest01_);
// initialisat° d'1 variable de type
// ResultSet
// execute la requete
rstest01_ = p_stmttest01_.executeQuery();
while (rstest01_.next()) {
// Possible value [livre.titre, titre, client.prenom, prenom]
liste_test01_.add(rstest01_.getString("titre"));
liste_test02_.add(rstest01_.getString("prenom"));
}
} catch(SQLException except) {
//
System.out.println("Except°:");
System.out.println("Fichier: F03_emprunt_controller.java");
System.out.println("Methode: test01_()");
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, except);
}
System.out.println("Found " + liste_test01_.size() + " livre.titre");
System.out.println("Found " + liste_test02_.size() + " client.prenom");
// imprime la ObservableList liste_test01_: les titres
for(String empt : liste_test01_) {
System.out.println("-: " + empt);
}
// remplit la ObservableList liste_testGeneral_
// avec les 2 autres
liste_testGeneral_.add(liste_test01_);
liste_testGeneral_.add(liste_test02_);
// imprime la ObservableList liste_testGeneral
for(ObservableList<String> empt : liste_testGeneral_) {
System.out.println("--: " + empt);
}
// permet d'acceder a la 1° ObservableArrayList
System.out.println(liste_testGeneral_.get(0));
// permet d'acceder a la 2° ObservableArrayList
System.out.println(liste_testGeneral_.get(1));
// permet d'acceder au 1° elt de la 1° ObservableArrayList
System.out.println(liste_testGeneral_.get(0).get(0));
return liste_testGeneral_;
// return liste_test01_;
} |
Enfin, ds la méthode initialize(URL p_url, ResourceBundle p_r_bdle)
j'essaye avec les lamba (que je ne connais pas) d'afficher ds la TableView
- TV02_col_titre, les titres des livres empruntés
- TV02_col_prenom, les prénoms des emprunteurs
J'ai bien differencie les etapes pr "etre sur de mon coup"
Je n'arrive pas a afficher les 2 informations en meme temps.
Je n'arrive qu'a afficher que les titres ou que le prenom des emprunteurs ds les colonnes de la TableView
Code:
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
|
@Override
public void initialize(URL p_url, ResourceBundle p_r_bdle) {
System.out.println("fichier: F03_emprunt_controller");
System.out.println("methode: initialize()");
// la colonne prenom de la TV02
// A quoi cela sert il?
// TV02.getColumns().setAll(TV02_col_prenom, TV02_col_titre);
//
ObservableList<String> list__01 = FXCollections.observableArrayList();
// ajout des prenoms
list__01.addAll(list_.get(1));
//
System.out.println("Nbre d'elts ds list__01:");
System.out.println(list__01.size());
// contient les titres
System.out.println("contenu de list__01");
System.out.println(list__01);
//
TV02_col_prenom.setCellValueFactory(feature -> {
String value = feature.getValue();
return new SimpleStringProperty(value);
});
// la colonne titre de la TV02
//
ObservableList<String> list__02 = FXCollections.observableArrayList();
// ajout des titres
list__02.addAll(list_.get(0));
//
System.out.println("Nbre d'elts ds list__02:");
System.out.println(list__02.size());
// contient les titres
System.out.println("contenu de list__02");
System.out.println(list__02);
//
TV02_col_titre.setCellValueFactory(feature1 -> {
String value1 = feature1.getValue();
return new SimpleStringProperty(value1);
});
// erreur:
// Can not retrieve property 'prenom' in PropertyValueFactory:
// javafx.scene.control.cell.PropertyValueFactory@4a15866a with provided class type: class java.lang.String
// TV02_col_prenom.setCellValueFactory(new PropertyValueFactory<String, String>("prenom"));
// erreur a la syntaxe:
// Type mismatch: cannot convert from ObservableList<String> to ObservableValue<String>
// TV02_col_prenom.setCellValueFactory(cellData -> (list__01));
// erreur:
// AVERTISSEMENT: Can not retrieve property 'client.prenom' in PropertyValueFactory:
// javafx.scene.control.cell.PropertyValueFactory@4a15866a with provided class type: class java.lang.String
// java.lang.IllegalStateException: Cannot read from unreadable property client.prenom
// TV02_col_prenom.setCellValueFactory(new PropertyValueFactory<String, String>("client.prenom"));
// erreur:
// AVERTISSEMENT: Can not retrieve property 'id_abonne' in PropertyValueFactory:
// javafx.scene.control.cell.PropertyValueFactory@53779ac3 with provided class type: class java.lang.String
// java.lang.IllegalStateException: Cannot read from unreadable property id_abonne
// TV02_col_prenom.setCellValueFactory(new PropertyValueFactory<String, String>("id_abonne"));
// erreur
// AVERTISSEMENT: Can not retrieve property 'titre' in PropertyValueFactory:
// javafx.scene.control.cell.PropertyValueFactory@4a15866a with provided class type: class java.lang.String
// java.lang.IllegalStateException: Cannot read from unreadable property titre
// TV02_col_prenom.setCellValueFactory(new PropertyValueFactory<String, String>("titre"));
// erreur
// AVERTISSEMENT: Can not retrieve property 'C1' in PropertyValueFactory:
// javafx.scene.control.cell.PropertyValueFactory@4d9d6253 with provided class type: class java.lang.String
// java.lang.IllegalStateException: Cannot read from unreadable property C1
// TV02_col_prenom.setCellValueFactory(new PropertyValueFactory<String, String>("C1"));
// erreur
// AVERTISSEMENT: Can not retrieve property 'C2' in PropertyValueFactory:
// javafx.scene.control.cell.PropertyValueFactory@53779ac3 with provided class type: class java.lang.String
// java.lang.IllegalStateException: Cannot read from unreadable property C2
// TV02_col_prenom.setCellValueFactory(new PropertyValueFactory<String, String>("C2"));
// erreurs:
// la methode n'est pas applicable pr les arguments
// constructeur indefini
// TV02_col_prenom.setCellValueFactory(new PropertyValueFactory<String, ObservableList>(test01_().get(0)));
// erreurs:
// la methode n'est pas applicable pr les arguments
// constructeur indefini
// TV02_col_prenom.setCellValueFactory(new PropertyValueFactory<ObservableList, String>(test01_().get(0)));
// erreur: type mismatch
// TV02_col_prenom.setCellValueFactory(cellData -> (list__01));
// erreur
// java.lang.ClassCastException:
// class com.sun.javafx.collections.ObservableListWrapper cannot be cast to
// class javafx.util.Callback (com.sun.javafx.collections.ObservableListWrapper
// and javafx.util.Callback are in module javafx.base@18.0.1 of loader 'app')
// TV02_col_prenom.setCellValueFactory((Callback<CellDataFeatures<String, String>, ObservableValue<String>>) list__01);
// la 2° methode prend le pas sur la 1°
TV02.setItems(list__01);
TV02.setItems(list__02);
} |
Dc soit
- y'a qque chose que je ne fais pas
- y'a qque chose que je fais mal,
- je n'utilise pas du tout la bonne méthode
Merci a vous,