Bonjour,
Je suis face à un problème qui me tient en échec depuis hier.
J'implémente une méthode pour pourvoir effectuer une requête SELECT pour récupérer des informations présente dans une base de données de type ORACLE XE 10g.
Voici la fonction Select en question:
Pour récupérer les données générées par cette requête j'utilise une autre méthode : getData.
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 public Vector<Vector<String>> Select2(String tab,Vector<String> SelField,String WhereField,String arg) throws SQLException { //Declarations String req, FSel = null; Vector<Vector<String>> result = null; int i = 0; //Format string for request FSel = SelField.elementAt(0); for (i=1;i<SelField.size();i++) { FSel = FSel + "," + SelField.elementAt(i); } //Execute request stmt = con.createStatement(); req = "SELECT " + FSel + " FROM " + tab + " WHERE " + WhereField + " like " + arg; System.out.println(req); //TODO Affiche la requête envoyée dans la console res = stmt.executeQuery(req); //Get request Result result = getData(SelField); return result; }
Tous mes problèmes viennent de cette dernière méthode.
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 public Vector<Vector<String>> getData(Vector<String> fields) { int nbFields = 0; int i = 0,pos = 0; boolean test = true; Vector<String> row = new Vector<String>(); Vector<Vector<String>> tab = new Vector<Vector<String>>(); nbFields = fields.size(); try { //res.first(); while (test) { row = new Vector<String>(); for (i=0;i<nbFields;i++) { pos = res.findColumn(fields.elementAt(i)); row.add(res.getString(pos)); } tab.add(row); test = res.next(); } } catch(SQLException evt) { System.out.println(evt.getErrorCode()); System.out.println(evt.getMessage()); } return tab; }
Si j'enlève les commentaires dej'obtiens
Code : Sélectionner tout - Visualiser dans une fenêtre à part res.First();et si je laisse cette instruction commentée j'obtiens comme message d'erreurOpération non valide sur un ensemble de résultats de type forward-only : first.ResultSet.next n'a pas été appelé
Pour information, la requête injectée dans la base de données fonctionne (testé avec SQL Command de Oracle) et ces méthodes marchent très bien si la base de données est MySQL.
Merci d'avance pour votre aide!!
Partager