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:
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;
	}
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
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;
	}
Tous mes problèmes viennent de cette dernière méthode.

Si j'enlève les commentaires de j'obtiens
Opération non valide sur un ensemble de résultats de type forward-only : first
et si je laisse cette instruction commentée j'obtiens comme message d'erreur
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!!