# SELECT Name= " " verhindern



## Guest (13. Mrz 2005)

Hallo , 

Ich habe ein Fenster mit mehreren Textfelder. In diesen Textfelder wird z.B. Name, Vorname, Plz, Ort…. eingetragen. Und in der Datenbank wird dann nach diesen Kriterien die Person gesucht.

Mein Problem ist es wenn ich z.B. bei Name :Muster eingebe und bei Vorname nix dann übergibt er bei mit den leeren String (bei Vorname) und Muster (bei Name) an die suche  auf der Datenbank (SELCT …..) und findet natürlich keinen der Muster „ „ heißt.


Ich könnte auch viele Select abfragen schreiben aber da ich zu viele Parameter habe würde ich das nicht für sehr sinnvoll halten
z.B. 1 Abfrage suche wenn name == eingabe und vorname == eingabe 
        2 abfrage suche wenn vorname == eingabe
       3  abfrage suche wenn name gleich == eingabe 


Ich möchte Personen suchen wenn ich name, vorname, plz eingebendas er mir alles dazu findet oder z.B. wenn ich nur name eingebe soll er mir alle Datensätze mit diesen Namen  (egal welcher Vorname ist) suchen.

Mein bisheriger Code  

*SQL-Abfrage*

```
public ResultSet getPerson (String name, String vorname,Long postleitzahl){
    return eineDatenbankverbindung.execDatenAbfrage
           ("SELECT * FROM T_PERSONEN WHERE  Name = '"+name+"' AND Vorname= '"+vorname+"' AND Postleitzahl ='" + postleitzahl+"'"); 
  }// get Person
```

*Übergebenen Werte aus den Textfelderern*

```
public Vector suchePerson (String name, String vorname, Long postleitzahl){
    ResultSet einAbfrageErgebnis = einSQLInterface.getPerson(name, vorname,postleitzahl);
    Vector resultList = new Vector();
         try{
      while(einAbfrageErgebnis.next()){
        einePerson = new Person();
        einePerson.setName(einAbfrageErgebnis.getString(2));
        einePerson.setVorname(einAbfrageErgebnis.getString(3));
        einePerson.setPlz(einAbfrageErgebnis.getLong(4));
        einePerson.setOrt(einAbfrageErgebnis.getString(5));
        einePerson.setStrasse(einAbfrageErgebnis.getString(6));
        einePerson.setHausnr(einAbfrageErgebnis.getString(7));
        einePerson.setGeburtsjahr(einAbfrageErgebnis.getLong(10));
        einePerson.setTelDienst(einAbfrageErgebnis.getString(9));
        einePerson.setTelPrivat(einAbfrageErgebnis.getString(8));

        resultList.add(einePerson);
      }// while

      einAbfrageErgebnis.close();
    }
     catch (SQLException e){
      System.out.println("SQL-Fehler: " + e.getMessage());
     } //catch
   return resultList;
  }
```

*Und in der gui übergebe ich halt die Werte aus den Textfeldern dieser such Methode*

Danke euch schon im Voraus!


----------



## DP (13. Mrz 2005)

du musst die string-länge je schlagwort nach einem trim() prüfen und nur zeichenketten >3 zeichen oder so zulassen. ansonsten benutzermeldung, dass schlagwort zu kurz oder du ignorierst das schlagwort...


----------



## Gast (13. Mrz 2005)

Ja und was habe ich dann davon 

ich muss doch drei paramter übergeben an die suche 
er sollt halt bei diesem selekt statement das "" nicht berücksichtigen


----------



## Bleiglanz (13. Mrz 2005)

du  musst dein select eben mit ifs zusammenbauen

```
einstringbuffer.append(" ... WHERE 1=1 ")
if(null!=name && name.trim().length()>1) 
{
    einstringbuffer.append(" AND name LIKE '").append(name).append("%'" );
}
if(null!=vorname && vorname.trim().length()>1)
{
//usw
```


----------



## Guest (13. Mrz 2005)

Hmm habs probiert leider geht das nicht so richtig
Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException: For input string: ""

bekomm den Laufzeitfehler


```
public ResultSet getPerson (String name, String vorname){
            sb.append("SELECT * FROM T_PERSONEN WHERE 1=1 ");
            if(name!=null && name.trim().length()>1){
              sb.append("AND Name LIKE '").append(name).append("%'");
            }
            else if(vorname!=null && vorname.trim().length()>1){
              sb.append("AND Vorname LIKE '").append(vorname).append("%'");
            }
          return eineDatenbankverbindung.execDatenAbfrage(sb.toString());
  }
```


----------



## Gast (13. Mrz 2005)

mein Fehler tut mir Leid schon gut


----------

