Beim Zugriff auf ein RDBMS ist das Ergebnisset, das Sie erhalten, normalerweise zeilenorientiert. Das heißt, immer wenn Sie ResultSet::next() aufrufen, springt der Cursor in die nächste Zeile. Deshalb Ihre Schleife
for (int i = 0; i < columncount; i++)
{
while (res->next())
{
...
}
}
zeigt nur das erste Attribut an.
Normalerweise vertauschen Sie innere und äußere Schleifen wie zum Beispiel
while (res->next())
{
for (int i = 0; i < columncount; i++)
{
...
}
}
Aber wenn Sie wirklich auf jeweils eine Spalte zugreifen müssen, müssen Sie prüfen, ob das ResultSet Ihnen erlaubt, den Cursor auf die erste Zeile zurückzusetzen. Wenn nicht, müssen Sie die Daten entweder zwischenspeichern oder immer wieder dieselbe SQL-Abfrage ausführen.