# Java SQL Ausgabe in Liste o.ä. abspeichern um mit dem Ergbnis "zu arbeiten"?



## nikgo (28. Feb 2022)

Hallo,
mir wurde gesagt ich solle mein SQL ausgabe welche ich über folgenden Code bekomme in Bspw. einer Liste o.ä. Speichern um damit zu arbeiten. Da ich relativ neu in Java bin kenne ich leider nur listen und habe keine Ahnung wie ich eine SQL Tabellen Ausgabe in einer Liste speichern soll und was mit "ö.ä." gemeint ist.
Hier erstmal der Code:

```
String stmnt = "SELECT * FROM dbo.Results";
PreparedStatement pstmnt = c.getConnection().prepareStatement(stmnt);
ResultSet rs = pstmnt.executeQuery();
ResultSetMetaData rsmd = rs.getMetaData();
int column_count = rsmd.getColumnCount();
for (int i = 1; i < column_count + 1; i++) {
String spaltenname = rsmd.getColumnName(i);
System.out.print(spaltenname);
}
//Output column contents of column i (variable number of columns)
System.out.print("\n");
while (rs.next()) {
for (int i = 1; i < column_count + 1; i++) {
System.out.print(rs.getString(i) + "\t");
}
System.out.println("");
}
}
```
Beispielcode wäre super! Bin grade einfach verwirrt.
LG
Niklas
Frage bearbeiten


----------



## Oneixee5 (28. Feb 2022)

Das würde in etwa so ablaufen:

```
List<User> users = new ArrayList<>();
while(rs.next()) {
   User user = new User();   
   user.setUserId(rs.getString("UserId"));
   user.setFName(rs.getString("FirstName"));
  ...
  ...
  ...


  users.add(user);
}
```
... wenn deine Abfrage eine Liste von User zurückgeben soll. User ist dabei austauschbar und du kannst dort deine eigene Klasse einsetzen.


----------



## M.L. (28. Feb 2022)

nikgo hat gesagt.:


> SELECT * FROM


Nebenbei: zwecks Einschränkung der potentiellen Ergebnismenge soll(te) man im Vorab nur die betreffenden Spalten ansprechen.


----------



## nikgo (1. Mrz 2022)

Oneixee5 hat gesagt.:


> Das würde in etwa so ablaufen:
> 
> ```
> List<User> users = new ArrayList<>();
> ...


Vielen Dank! Mein Ziel ist es meine SQL Tabelle welche ich mir momentan nur ausgeben lassen kann in einem Array zu Speichern. Ich habe hierbei an ein 2D Array gedacht, da es ja vereinfacht wie eine Tabelle aufgebaut ist. Jetzt frage ich mich wie ich dieses Automatisch befüllen lassen kann. Bisher habe ich es hinbekomme mir ein Array in der Länge der Ausgabe zu bauen. Jetzt muss ich dieses nur noch mit leben füllen. Leider habe ich grade Tomaten auf den Augen und finde keine gute rangehensweise wie ich das ganze realisieren kann.
Hier der Code:


```
PreparedStatement pstmnt = c.getConnection().prepareStatement(stmnt, ResultSet.TYPE_SCROLL_INSENSITIVE,
                ResultSet.CONCUR_READ_ONLY);
        pstmnt.setInt(1, 2); // Setzt das "?" zu 2.
        ResultSet rs = pstmnt.executeQuery();

        ResultSetMetaData rsmd = rs.getMetaData();
        // Spalten zählen
        int column_count = rsmd.getColumnCount();

        // Zeilen zählen
        int row_count = rs.last() ? rs.getRow() : 0;
        rs.beforeFirst();
    
        // 2D Array erstellen
        String[][] arr = new String[row_count][column_count];


//Test das Array zu befüllen (klappt leider nicht)
    for (int zeile = 0; zeile < arr.length; zeile++) {
            for (int spalte = 1; spalte < arr[0].length+1; spalte++) {

                arr[zeile][spalte] = rs.getString(spalte);
                System.out.print(arr[zeile][spalte]);

            }
            System.out.println();
        }
```


----------



## Oneixee5 (1. Mrz 2022)

Arrays sind hier Unsinn und unpraktisch. So etwas unterstütze ich nicht. Arbeite mit Klassen/Objekten und einer Liste.
Schon wenn in einer Spalte der DB eine Zahl oder Datum steht kommst du ins schwimmen. Es soll ja dann auch mit den Daten weitergearbeitet werden, System.out.println ist ja nicht das Ziel einer Anwendung.
Eine Alternative wäre ein Liste vom Map aber auch das ist ein unheimliches gewurstel.


----------



## mihe7 (1. Mrz 2022)

nikgo hat gesagt.:


> Mein Ziel ist es meine SQL Tabelle welche ich mir momentan nur ausgeben lassen kann in einem Array zu Speichern.


Warum?


----------

