# ResultSet ist null warum?



## Zakon (26. Jan 2021)

Hallo alle zusammen 
Hier der Code:


```
public List<FirmenDetails> loadfirmen() {
        String sql =  ("SELECT * FROM Frimen");
        List <FirmenDetails> listFirmen;
        listFirmen = (List<FirmenDetails>) loadData(sql);
        return listFirmen;
    }
```


```
private ResultSet loadData(String sql) {
        try {
            Statement ps = con.prepareStatement(sql);
            resultSet = ps.executeQuery(sql);
        }
        catch (SQLException e){
            e.printStackTrace();
        }
        return resultSet;
    }
```

Mein Resultset wenn ich die Query auswfü´hren lasse ist immer null und ich weiß nicht ganz warum da die Query auf jeden fall laut debuger richtig übergeben wird.
Danke Im Vorraus


----------



## kneitzel (26. Jan 2021)

Also irgendwie kann ich das, was Du baust, nicht nachvollziehen. loadData gibt ein ResultSet zurück. Das ist doch dann kein List<FirmenDetails>, also ein cast kann nicht klappen.

Und bekommst Du ggf. eine Exception? Du gibst in dem Fall ja einfach nur den StackTrace aus ...


----------



## Zakon (26. Jan 2021)

Ich habe mehrere Methoden die mit einer SQL Statement gefüllt sind je nachdem weclher button gedrückt wird soll load data über in dem Falle loadfirmen mit der query ausgeführt werden. Dann soll mir load data ein ResultSet zurück geben was ich dann in loadFirmen in eine Liste umwandel so der Plan 🤔

EDIT: So oder so ist mein ResultSet null bedeutet ich kann nichtmal weiterarbeiten weil ich da schon scheitere


----------



## kneitzel (26. Jan 2021)

kneitzel hat gesagt.:


> Und bekommst Du ggf. eine Exception? Du gibst in dem Fall ja einfach nur den StackTrace aus ...


Hast Du diesbezüglich noch einmal geschaut? Oder eben im Debugger würde er durch die catch Anweisung laufen ...


----------



## Zakon (26. Jan 2021)

Habe jetzt noch das oben in zeile 3 das Preparet statement zu einem creatStatement umgeändert jetzt bekomme ich die richtige anszahl meine Colum und rows. Frage jetzt nur noch wei änder ich das zu einer vernünftigen Liste die ich benutzen kann?
Wenn ich sowas wie:

```
while (rs.next()){
    add....(rs.getInt()...)
}
```
Mache dann habe ich das gleiche Problem wesegen ich das ja so geschireben habe. Nämlich das ich mit der Reihnfolge von getInt, getString usw. festgelegt bin an die jeweilige Tabelle. Ich möchte das ganze aber Variabel haben das ich ein Resultset habe was sich nur für die jweweilige anfrage verändert.
Ich hoffe das ist ganz verständlich


----------



## Thallius (26. Jan 2021)

Dir ist aber schon klar, dass FRIMEN nicht = FIRMEN ist?

Eigentlich sollte da eine Exception geworfen werden weil es die Tabelle gar nicht gibt


----------



## Zakon (26. Jan 2021)

Thallius hat gesagt.:


> Dir ist aber schon klar, dass FRIMEN nicht = FIRMEN ist?
> 
> Eigentlich sollte da eine Exception geworfen werden weil es die Tabelle gar nicht gibt


Tippfehler von mir. Die Tabelle in meiner Datenbank heißt Frimen habe es bis jetzt nicht geändert kann ich ja aber noch machen müsste dann ja nur die Sql Statements anpassen.  EDIT: Und natürlich den namen in der Datenbank 😁


----------



## Thallius (26. Jan 2021)

Ich glaube was du willst ist sowas wie Hybernate es von Hause aus anbietet oder? Wenn du wirklich dich nicht darum kümmern willst was die Queries zurück liefern sondern die Daten einfach direkt in einer Liste von Objekten stecken willst, dann solltest du Hybernate o.ä. Framework verwenden.


----------



## Oneixee5 (26. Jan 2021)

Du must in irgend einer Art z.B.: einer Schleife zeilenweise über das ResultSet-Objekt iterieren, um jeden Spaltenwert herauszuziehen. Hier ein einfaches Beispiel:

```
List ll = new LinkedList();
ResultSet rs = stmt.executeQuery("SELECT userid, username FROM USER");
while (rs.next()) {
  int i = rs.getInt("userid");
  String str = rs.getString("username");
  User user = new User(i, str);
  ll.add(user);
}
```
Dies sollte für eine Übung ausreichen.


----------



## Zakon (26. Jan 2021)

Ok ich bedanke mich habe nur gehofft es gäbe irgendwie eine Lösung die mehr Variabel ist und somit einmal geschrieben für alle Tabellen funktioniert.
Trozdem danke falls ich hier das Rad neu erfinden sollte melde ich mich 😁


----------



## mrBrown (26. Jan 2021)

Thallius hat gesagt.:


> Hybernate


H*i*bernate.


----------



## Oneixee5 (26. Jan 2021)

Du kannst auch sowas machen:

```
QueryRunner run = new QueryRunner(dataSource);
// ResultSet rows into a List of Person JavaBeans.
ResultSetHandler<List<Person>> h = new BeanListHandler<Person>(Person.class);
List<Person> persons = run.query("SELECT * FROM Person", h);
```
dafür benötigst du aber eine externe Bibliothek von https://commons.apache.org/proper/commons-dbutils/


----------



## Zakon (27. Jan 2021)

Ich habe es jetzt einfach mit der


Oneixee5 hat gesagt.:


> Du must in irgend einer Art z.B.: einer Schleife zeilenweise über das ResultSet-Objekt iterieren, um jeden Spaltenwert herauszuziehen. Hier ein einfaches Beispiel:
> 
> ```
> List ll = new LinkedList();
> ...


Ich habe es jetzt einfach hiermit gemacht da ich von Hibernate absolut null Ahnung habe das muss ich mir erstmakl angucken.
Und @Oneixee5 deine alternative war für mich auch keine lösung weil ich der Klasse nur auf java.utils zuurückgreifen möchte und SQL logischerweise.
Danke euch trozdem


----------

