# sql abfrage und suchfunktion



## thom (16. Aug 2007)

hallo,

ich habe eine gui mit verschieden feldern (es geht um kundenverwaltung)

ich würde gerne nach nachnamen suchen, wie kann die sql-abfrage aussehen? jeder kunde hat auch noch eine automatisch generierte kundennummer, die in der gui nicht angezeigt wird, diese kundennummer ist gleichzetig id in der db-tabelle kunde...

danke


----------



## SlaterB (16. Aug 2007)

hmm, das ist ja überhaupt kein bestimmtes Problem, sondern einfach nur noch fehlende SQl-Kenntnisse?,

dann musst zu zumindest einen Hinweis akzeptieren (kannst ja ignorieren  )

http://www.sql-und-xml.de/sql-tutorial/
Sql-Tutorial: Lernen Sie Sql und üben Sie die entsprechenden Befehle interaktiv anhand des Sql-interaktiv-lernen

insbesondere
http://www.sql-und-xml.de/sql-tutorial/where-auswahl-von-daten-zeilen.html
wo auch mit Namen gearbeitet wird


----------



## Gast (17. Aug 2007)

wie soll denn die abfrage lauten, wenn es 2 oder mehere kunden mit gleichem nachnamen gibt? meine idee wäre eine mit ToolBox.showMessageDialog(...) eine fehlermeldung auszugeben und den benutzer dazu auffordern, andere daten einzugeben, wie zb geb.datum oder gibt es da alternativen?


----------



## mikachu (17. Aug 2007)

leute mit gleichem nachnamen sind doch zulässig... du hast ja gesagt, dass jedes tupel in der datenbank eine ID als primary key besitzt... nur dieser primary key muss eindeutig sein, nix anderes !

edit 1:
ID ist die kundennummer


----------



## FenchelT (17. Aug 2007)

Moin erstmal



			
				Gast hat gesagt.:
			
		

> wie soll denn die abfrage lauten, wenn es 2 oder mehere kunden mit gleichem nachnamen gibt?



Naja, genauso, wie sie aussieht, wenn Du  einen oder fuenfhundertsiebenunddreissig Kunden mit dem gleichen Namen hast. An der Abfrage aendert sich nichts



			
				Gast hat gesagt.:
			
		

> meine idee wäre eine mit ToolBox.showMessageDialog(...) eine fehlermeldung auszugeben und den benutzer dazu auffordern, andere daten einzugeben, wie zb geb.datum oder gibt es da alternativen?



Warum Fehlermeldung? Es ist doch richtig, wenn es einen Namen mehrmals gibt, dass diese auch auch alle im ResultSet oder wo auch immer  zurueck geliefert werden.

Statt den User zu noetigen noch weitere Daten als Suchkriterium einzugeben kannst Du ihm ja eine Ergebnisliste anzeigen, aus der er den richtigen auswaehlen kann. Dann kannst Du den ausgewaehlten
DS in der GUI anzeigen.

JustMy2Cent


Viele Gruesse
FenchelT


----------



## Gast (17. Aug 2007)

hmm...ich kenne mich  noch nicht so gut mit datenbanken aus(höre die vorlseung erst im nä semester)

was ich nicht verstehe, wenn der benutzer im feld nachname einen nachnamen eingibt und wenn es mehere kunden mit gleichem nachnamen gibt, was passiert denn dann? die eindeutige kundennr. kann er ja nicht eingeben...oder wie soll die select-abfrage lauten?


----------



## Gast (17. Aug 2007)

danke für die idee fenchelT!!


----------



## Gast (17. Aug 2007)

und wie lautet die richtige sql abfrage? (man kann nicht nur nach nachname sondern auch nach anderen kriterien suchen...)
SELECT KUNDE FROM KUNDE
oder 
SELECT KUNDENNR FROM KUNDE?


----------



## mikachu (17. Aug 2007)

die 2.

...angenommen, deine tabelle KUNDE hat eine spalte KUNDENNR...


----------



## FenchelT (17. Aug 2007)

Hallo nochmal,

sei mir nicht boese, aber einen kompletten SQL-Kurs durchzuziehen, mag ich hier nicht, dafuer gibt es auch 
im Internet genug Lektuere.

Es bringt Dir auch herzlich wenig, wenn ich Dir das jetzt hier poste und Du gar nicht weisst, was genau passiert.

Aber noch etwas zur Vorgehensweise:

Nehmen wir einfach an, Du hast drei Suchfelder (Name, Plz, Ort)

NUn brauchst DU ja schlussendlich einen SQl-String, der auf Deine eingegebenen Felder regagiert.
Ich benutze fuer sowas immer eine Function und  einen StringBuffer (sb)

Beispiel:
sb.append("SELECT feld1, feld2, feld_n FROM tabelle WHERE 1 = 1 );

if(pruefen ob Suchfeld Name nicht leer ist)
{
  sb.append("AND deinDatenbankfeld_Name = '" + suchFEldName.getText() + "'");
}

auf diese Art pruefe ich auch die anderen Felder ab.

Am Ende sag ich dann
return sb.toString(); 

und habe meinen fertigen SQL String.

Das ist jetzt eine sehr vereinfachte Darstellung von dem was ich tatsaechlich mache.
Ich pruefe im Vorfeld noch die Suchfeldeingaben auf unerlaubte Zeichen (Thema SQL-Injection)

Ich habe auch noch eine Pruefung ob ein %-Zeichen eingegeben wurde,  und wenn ja, dann fuege ich anstatt
sb.append("AND deinDatenbankfeld_Name = '" + suchFEldName.getText() + "'");

dieses hier ein:
sb.append("AND deinDatenbankfeld_Name LIKE % '" + suchFEldName.getText() + "'"); // auf das letzt % kann verzichtet werden, es kommt ja schon aus dem Textfeld

Nun, das ist so in etwa mein Vorgehen, aber ich glaueb, sowas macht so ziemlich jeder anders.
Und wenn Du Dich mit SQL noch nicht beschaeftigt hast, macht es auch keinen Sinn, sich des Themas SQL-Injection anzunehmen.

Lies Dich mal in Ruhe im Internet schlau.
Es gab auch mal ne Online Version von "SQL in 21 Tagen" Fuer den Anfang eigentlich ganz okay.


Viel Erfolg
FEnchelT


----------



## Gast (17. Aug 2007)

@ FenchelT

darf ich dich noch fragen , wie du den gefundenen datensatz in gui anzeigst?


----------



## Timmah (17. Aug 2007)

Du hast schonmal Guis in Java programmiert?

Sowas kannst du z.B. in einer JTable darstellen, indem du jedes Tupel der DB-Abfrage in eine Zeile in der JTable mit den entsprechenden Spalten schreibst.


----------



## Gast (17. Aug 2007)

bis jetzt habe ich nur mit dem laoyot die oberfläche gemacht und die ganzen funktionen sind nicht mehr so einfach


----------



## tobitob (17. Aug 2007)

man kann doch das auch mit einer errylist lösen oder nicht? will jetzt nichts falsches sagen, bin noch anfänger


----------



## SlaterB (17. Aug 2007)

ArrayList heißt das


----------



## Guest (17. Aug 2007)

"Query by example" ist auch noch ein Stichwort, mit dem du Suchmaschinen füttern kannst.


----------



## Gast (17. Aug 2007)

ich wollte auch arraylist schreiben, aber ist das jetzt richtig oder nicht??


----------



## SlaterB (17. Aug 2007)

bei nahezu allem hilft eine ArrayList, aber worauf genau beziehst du dich eigentlich?


----------

