09. december 2002 - 21:54Der er
29 kommentarer og 1 løsning
Action performed (mysql Søgning)
Lille forhistorie!
Jeg har en application der kan indsætte, hente og udskrive alle oplysninger på en database.
Nu vil jeg gerne lave et søge felt hvor jeg kan søge på enkelte navne i databasen.
Jeg opererer med en GUI klasse, hvor mine action performed metoder ligger. En DB klasse der håndterer SQL med DB og regner med at jeg skal have en 3. klasse der håndterer mine metoder. MEN hvordan dælen får jeg det til at funke?? Jeg stiller en ordelig røvfuld point på højkant for et godt svar med kode eksempler (jeg skal aflevere projekt onsdag, så jeg er lidt under pres!)
Ser dog nok ikke mere på det før imorgen ved 10 tiden, stil endelig spmg. så skal jeg nok uddybe hvis der er brug for det.
Hvad mener du med enkelte navne i db? Er det bestemte tabeller eller dem alle sammen? En opdeling i grænseflade/funktionslag/model er tit en god ide.. Om der skal tages mønstre i brug afhænger af den konkrete problemstilling.
Det først du skal finde ud af er om du vil søge i databasen eller i memory.
Hvis du søger i databasen, så erstatter du SELECT * FROM TABEL med SELECT * FROM TABEL WHERE F=X eller SELECT * FROM TABEL WHERE F LIKE %X%, så kan du bruge samme GUI del til at vide alle data elle til at vise et subset af data med.
Hvis du søger i memory læser du alle records op fra databasen i en data-struktur (f.eks. en eller flere Vector !) og søger i den data-struktur.
Det sidste vil normalt være hurtigere, men vil også kræve lidt mere hukommelse.
Databasen indeholder en tabel, jeg henter allerede alt data ind i en vector, det sker som strings en kolonne af gangen. ER det nemmest at søge på databasen, eller er det nemmest at søge lokalt i hukommelsen. Der kommer ikke til at ligge uhyggeligt meget data i hukommelsen, så hvad skal jeg gøre hvis jeg vil søge lokalt? >>> ARNE!§?
I det første eksempel indholde Vector'en kun en streng. I det andet eksempel indeholder Vector'en et Object med 2 strenge og 1 heltal.
Og jeg nøjes med at printe lidt. Du skal formentlig have vist dem i din GUI (kun vise de fundne eller åbne en nyt vindue med de fundne eller highligte de fundene i den totale liste).
Vil du ikke kigge på vores kode, vi kan simpelthen ikke få det til at funke.
Jeg vil gerne sende dig det hele, men det er lidt nemmere at se på som dokumenter i word f.eks, points er dine hvis du kan få de her søge funktioner jeg spørger om til at virke. Min mail er Uggi_k@hotmail.com
hvad er din mail? og du må da endelig poste svaret her (så alle kan se det, jeg ville også gerne poste koden her, men jeg tror bare det er nemmere at overskue som et word dokument). Det er ikke så stort programmet som det måske lyder... og den reelle kode der skal skrives er nok kun ca 10 linier... det er bare lige med at få det rigtigt. (det samlede program er måske 7 sider hvor 4 af dem er gui, så der er ikke meget mere end 3 siders metode max.)
Jeg kan lige forklare kort. Jeg skal hente tekst fra et tekst felt (min gui klasse) den skal hentes over i en sql kommando til databasen (vores dbConnect klasse) jeg tror jeg skal bruge en sidste klasse til at hente string... altså noget med en get / set metode. Det skal bare laves for en enkelt søge funktion.
Altså: Jeg vil gerne kunne skrive et telefonnummer i et tekstfelt som jeg søger på i databasen. Hvis du kan hjælpe mig med det, som er den sidste del i mit projekt, så er vi (min læsegruppe og jeg) dig evigt taknemmelige! :)
HEy jeg prøver at bruge din kode til at søge lokalt... men det virker ikke helt
if(tryk.getSource() == telefonOK) { boolean fnd = false; Vector v = new Vector(); v.add(""+db1.retunerVector()); String k = ""+skrivTelefon.getText(); for(int i = 0; i < v.size(); i++) { String vv = (String)v.get(i); if(v.equals(k)) fnd = true; if(fnd) { System.out.println("fundet"); } else { System.out.println("er der ikke"); } }
Ser nogenlunde sådan ud nu... men den skriver bare hele tiden at den ikke finder noget match... hvis jeg ændrer til "boolean fnd = true" skriver den hele tiden fundet... hvad gør jeg galt??
kan det være fordi jeg får vectoren tilbage som en lang string og ikke som de 6 kolonner DB indeholder? At den så skal have hele string for at finde et match?? (jeg er jo ikke helt klar over hvordan sådan en søgning virker!)
Ok men de ligge jo i to klasse (altså vector v ligge i db Connect, så hvis jeg ikke instantierer et nyt Objekt af Vector (vector v = new Vector();) så kommer der en Java.lang.Class exception ?? hvordan kommer jeg rundt om den? Du skriver jo bare vector v = db1.returnervector... det går kun variablen k, fordi den ligger i samme klasse.
Jeg kan se 2 mulige problemer: 1) Du gemmer din Vector i en ny Vector med kun et element med kun et element i. 2) Det ser ud som om k indeholde labelen for og ikke værdien af det indtastede.
Ret sikker på, at jeg har fat i værdien af det der indtastes. Problemet kunne derimod meget vel være, at der kun gemmes et element i min vector. Kan bare ikke helt gennemskue, hvordan de enkelte elementer i min oprindelige vector hentes ud. Ideen er jo egentlig, at jeg skal kunne sammenholde det indtastede telefonnummer med de telefonnumre, der ligger på databasen - og intet andet!
Hvis jeg skulle lave det så tror jeg at jeg ville gøre det som:
man trykker "telefon" i hoved framen så popper der en ny mindre frame op man indtaster telefonnummer det fundne telefon nummer vises på den frame <--- nyt man lukker selv vinduet når man ike vil søge mere <--- nyt
Kan man få udskrevet hele linien der hører til telefon nummeret? altså med mail og den slags... og kan man få det til at erstatte den Jlist vi allerede viser med alle søgeresultater fra databasen??
PS: du har tjent dine point! men hvis du gider at hjælpe med det sidste så er du sku god. Hvis du skal have flere point for det, så må jeg jo finde ud af det :)
[i en del sammenhænge vil Java endda selv kunen finde ud af at kalde toString for at konvertere til String, men man kan altid kalde eksplicit hvis man vil]
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.