Problème de navigation avec un Resultset
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:
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:
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.:evilred:
Si j'enlève les commentaires de j'obtiens
Citation:
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
Citation:
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!!