Lorsque vous accédez à un SGBDR, le ResultSet que vous obtenez est généralement orienté ligne. C'est-à-dire que chaque fois que vous appelez ResultSet::next(), le curseur passe à la ligne suivante. C'est pourquoi votre boucle
for (int i = 0; i < columncount; i++)
{
while (res->next())
{
...
}
}
n'affiche que le premier attribut.
Normalement, vous permutez les boucles intérieures et extérieures telles que
while (res->next())
{
for (int i = 0; i < columncount; i++)
{
...
}
}
Mais si vous avez vraiment besoin d'accéder à une colonne à la fois, vous devrez vérifier si le ResultSet vous permet de réinitialiser le curseur sur la première ligne. Sinon, vous devez soit mettre les données en cache, soit émettre la même requête SQL encore et encore.