SELECT Name= " " verhindern

  • Themenstarter Themenstarter Guest
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
G

Guest

Gast
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
Code:
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
Code:
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!
 
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...
 
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
 
du musst dein select eben mit ifs zusammenbauen
Code:
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
 
Hmm habs probiert leider geht das nicht so richtig
Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException: For input string: ""

bekomm den Laufzeitfehler

Code:
  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());
  }
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben