# Zeile aus der Datenbank holen wenn ein match besteht



## Kirby.exe (27. Jan 2020)

Könnte mir jemand erklären wie ich nur Elemente aus der DB gefechted werden, welche einem bestimmten String Matchen, welcher übergeben werden?

Den Code habe ich im Moment, jedoch returned er alle Werte aus den Spalten, da die WHERE Bedingung fehlt... 

Das ist der jetzige Code:

```
/*============ fetches entries from table ===============*/
    public String[] getEntries(String username, String password) throws Exception{
        try {
            Connection conn = connection.getConnection();
            PreparedStatement getEntries = conn.prepareStatement("SELECT username, password FROM login WHERE <---- hier muss die Condition hin ");
            ResultSet result = getEntries.executeQuery();
          
            String[]resultArray = new String[2];
            while(result.next()) {
                System.out.println(result.getString("username") + " " + result.getString("password"));
                resultArray[0] = result.getString("username");
                resultArray[1] = result.getString("password");
            }
            System.out.println("All records have been selected!");
            getEntries.close();
            conn.close();
            return resultArray;
        } catch (SQLException ex) {
            // handle any database errors
            System.out.println("Error when loading entrie");
            System.out.println("SQLException: " + ex.getMessage());
            System.out.println("SQLState: " + ex.getSQLState());
            System.out.println("VendorError: " + ex.getErrorCode());
        }
        return null;
    }
```

Also ich weiß das man es so machen kann:

```
SELECT username, password FROM login WHERE username = 'tester'
```

Nur möchte ich für "tester", beliebige Variablen benutzen können


----------



## kneitzel (27. Jan 2020)

Dann schau Dir einmal die PreparedStatement Klasse und Beispiele für die Nutzung an.

Und wenn du nicht auf Gleichheit prüfen willst sondern ggf. auch Wildcards nutzen willst: Statt = könntest Du like nutzen.


----------



## Kirby.exe (27. Jan 2020)

JustNobody hat gesagt.:


> Dann schau Dir einmal die PreparedStatement Klasse und Beispiele für die Nutzung an.
> 
> Und wenn du nicht auf Gleichheit prüfen willst sondern ggf. auch Wildcards nutzen willst: Statt = könntest Du like nutzen.


Ok werde ich tuen  Ich möchte ja auf Gleichheit prüfen, ich möchte exakt die Eingabe aus dem TextField aus der DB holen und wenn die halt nicht existiert kommt die Meldung, dass der User nicht existiert


----------



## Kirby.exe (27. Jan 2020)

Kaum googelt man nach der Klasse findet man, was man sucht....  Dankeschön


----------



## Kirby.exe (27. Jan 2020)

Habe es jetzt so gemacht:

```
/*============ fetches entries from table ===============*/
    public String[] getEntries(String username, String password) throws Exception{
        try {
            Connection conn = connection.getConnection();
            PreparedStatement getEntries = conn.prepareStatement("SELECT username, password FROM login WHERE username=? AND password=?");
            getEntries.setString(1, username);
            getEntries.setString(2, password);
            ResultSet result = getEntries.executeQuery();
            
            String[]resultArray = new String[2];
            while(result.next()) {
                System.out.println(result.getString("username") + " " + result.getString("password"));
                resultArray[0] = result.getString("username");
                resultArray[1] = result.getString("password");
            }
            System.out.println("All records have been selected!");
            getEntries.close();
            conn.close();
            return resultArray;
        } catch (SQLException ex) {
            // handle any database errors
            System.out.println("Error when loading entrie");
            System.out.println("SQLException: " + ex.getMessage());
            System.out.println("SQLState: " + ex.getSQLState());
            System.out.println("VendorError: " + ex.getErrorCode());
        }
        return null;
    }
```


----------



## kneitzel (27. Jan 2020)

Wenn Du eh nur einen Wert auslesen willst, dann kannst Du aus der while Schleife eine if Bedingung machen.
Das macht meiner Meinung nach den Code leserlicher und es spart einen next() Aufruf.


----------



## Kirby.exe (27. Jan 2020)

JustNobody hat gesagt.:


> Wenn Du eh nur einen Wert auslesen willst, dann kannst Du aus der while Schleife eine if Bedingung machen.
> Das macht meiner Meinung nach den Code leserlicher und es spart einen next() Aufruf.


Ich frage mich ehrlich gesagt gerade was ich genau mit der while Schleife bezwecken wollte xD...Ich habe ja nur zwei werte xD Du hast recht, mit einem if ist das hundert mal besser


----------



## kneitzel (27. Jan 2020)

Also Du hast (hoffentlich) nur eine row - also eine Zeile der Tabelle (==> Unique Index auf username)
Die Anzahl der Werte, die Du aus der Zeile liest, ist egal. 

Die while Schleife ist halt üblich, wenn man mehrere rows lesen will / muss. Es ist halt ein "üblicher Code", der schnell geschrieben ist bzw. der schnell kopiert ist. Und er macht ja prinzipiell, was er soll, also ist er auch nicht falsch. Es ist nichts Schlimmes. Daher war das in erster Linie nur ein Vorschlag.


----------

