# SQL Abfrage



## Guest (14. Jan 2008)

Ich programiere gerad ein JSP und brauche eine SQL Abfrage.
Diese soll mit alle Orte auf einer Tabelle holen und ausgeben... Folgendes hatte ich mir da gedacht (funktioniert aber leider nicht).



```
public String getResultSpalte() throws SQLException {
        result   =rs.getObject(i).toString();
        return result;
   }
```

"i" fängt dabei halt bei 1 an und wird so lange hochgezählt bis es keine Einträge mehr in de rTabelle gibt. Das funktioniert aber irgendwie nicht, wenn dort eine 2 drin steht kommt eine "OutofBounds" Exception.

woran liegt das?
Wie hole ich mir mehrere Ergebnisse aus einer Tabelle ?

DANKE


----------



## mimo (14. Jan 2008)

Erstmal was ist denn _???

Dann wie sieht es denn mit dem Resultset aus, da hast du doch alle Werte + Metadaten. Damit kannst du dir dann alles basteln was du willst.

Gruß

MIMO_


----------



## maki (14. Jan 2008)

Was ist i, result, etc. pp.??


----------



## Niki (14. Jan 2008)

mit ResultSet#get[irgendwas] bekommst du den Spalteninhalt der Zeile, in der sich der Cursor gerade befindet. Probier mal das:


```
ResultSet rs = stmt.executeQuery("....");
while(rs.next()){
  System.out.println(rs.getString(1));
}
```

nicht vergessen ResultSet und Statement zu schließen, da diese Ressourcen verbrauchen.


----------



## Gast (14. Jan 2008)

Das ist schonmal gut doch rufe ich das über so auf:

suche.jsp

for(int i=0; i < 2; i++){
		SQL.setQuery("SELECT DISTINCT ort FROM job_jobstudenten"); 
		out.println("<option selected>"+SQL.getResultSpalte()+"</option>");
}


und in einer anderen Datei ist das mit dem SQL, also:

	public String getResultSpalte() throws SQLException {
		while(rs.next()){
		  result = (rs.getString(1));
		}
		  return result;
    }


Er gibt mir dann also immer nur das letzte result aus und nicht auch die davor, wie kann ich das lösen?

DANKE schonmal


----------



## Niki (14. Jan 2008)

Dann darfst du keinen String sondern eine List als return definieren:

```
public List<String> getResultSpalte() throws SQLException {
  List<String> erg = new ArrayList<String>();
  while(rs.next()){
    erg.add(rs.getString(1));
  }
  return erg;
}
```


----------



## Gast (14. Jan 2008)

Stimmt, hört sich gut an. 
Doch wenn ich das mache bekomme ich en Fehler:

The Typ of List is not generic; it connat be paramatized with arguments <String>

Hmmm, woran leigt das nun schon wieder ?
Danke Niki...


----------



## Gast (14. Jan 2008)

Hab das nun mal mit einer LinkedList gemacht, dann geht es 

Nur wie rufe ich nun immer die einzelen Einträge der Liste ab, ich bekomme jetz die ganzen Einträge mit Komma getrennt als aus gabe ...


----------



## Gast (14. Jan 2008)

Habs ...
mit: SQL.getResultSpalte().get(i)

DANKE


----------



## Niki (14. Jan 2008)

mit List#get(int index) kannst du ein bestimmtes Element ansprechen.
Über jedes Element der Liste iterieren:

```
for(int i = 0; i < l.size(); i++){
  System.out.println(l.get(i));
}

//oder ab Java5
for(String s : l){
  System.out.println(s);
}

//oder vor Java5
for(Iterator iter = l.iterator(); iter.hasNext();){
  String s = (String)iter.next();
}
```


----------

