Dans ma classe Appli, je me connecte à une BDD et je lance une requete SQL via la méthode envoiRequete(). Je récupère ensuite le nombre de lignes n qui vont être renvoyées par ma requête SQL. Puis je crée les tableaux id_event et nom de longueur n qui serviront à stocker le résultat de ma requête.
Ainsi la longueur de mes tableaux est adaptée au nombre de lignes renvoyées par la requête.
Ce dont j'ai besoin : Récupérer ces tableaux dans une classe principale distincte. Or pour cela ces tableaux doivent être définis en variables globales et non locales, comme c'est présentement le cas.
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 import java.sql.*; class Appli { public Appli () { envoiRequete (); } void envoiRequete() { try { String nomDriver = "com.mysql.jdbc.Driver"; try { Class.forName(nomDriver); } catch(ClassNotFoundException cnfe) { System.out.println("La classe "+nomDriver+" n'a pas été trouvée"); cnfe.printStackTrace(); } Connection db; ResultSet rs; Statement s; String requete; { db = DriverManager.getConnection("jdbc:mysql://localhost:3306/freez?","hote",""); s = db.createStatement (); /* ----------------------------------------- Ici on utilise la méthode getPhrase de nos objets pour constituer une requete a la place de la requete suivante : ----------------------------------------- */ requete = "SELECT * FROM event;"; rs = s.executeQuery (requete); int i = 0; //Récupération du nombre de lignes du résultat rs.last(); int n = rs.getRow(); System.out.println("\nResultat de la requete '"+requete+"' : ("+n+" entrees)"); //Création des tableaux à 1 dimension à n lignes int id_event [] = new int [n]; String nom [] = new String [n]; //Remplissage des tableaux do{ id_event [i] = rs.getInt(1); nom [i] = rs.getString(2); i++; }while (rs.previous()); db.close (); } } catch (SQLException ex) { System.out.println("Exception: " + ex.toString()); ex.printStackTrace() ; } } /* envoiRequete */ public static void main(String argv[]) { new Appli (); } }
Là où ca coince : Si je définis mes tableaux en variables globales au début de la classe, je n'aurais pas encore récupéré le nombre de lignes n renvoyées par la requête SQL. Et je ne pourrais donc pas adapter la taille de mes tableaux lors de leur création. En effet je ne peux pas juste les définir au début de la classe, et préciser leur taille dans la méthode après avoir récupéré le nombre de lignes.
NOTE : C'est une version simplifiée du problème, mais c'est très important pour moi de connaitre exactement le nombre de lignes que mes tableaux doivent avoir. J'applique un traitement assez lourd pour chaque ligne dans ma version longue...
Idée : Si je pouvais forcer la définition d'une variable globale dans une méthode cela résoudrais mon problème et je n'aurais pas besoin de définir les tableaux avant la méthode. Mais c'est apparemment impossible...
SVP, aidez-moi.
Partager