Avatar billede ircnoob Nybegynder
16. maj 2006 - 12:15 Der er 8 kommentarer og
1 løsning

Oracle select statement

Hej,
har følgende sql statement der skal bruges i en java applikation der kører over en oracle database ...

Problemet er jeg skal søge på et navn på et medlem, som ligger som en enkelt streng i databasen, så ligger som fx "Klaus Andersen", og så skal jeg kunne nøjes med at søge efter "Klaus" .. Men hvordan gør jeg dog lige det.. :)  .. den virker når jeg søger på det specfikke "Klaus Andersen" ..

Select name, id from members where name = ? order by name;
Avatar billede pnielsen Nybegynder
16. maj 2006 - 12:17 #1
Select name, id from members
where name like 'Klaus%'
  order by name;
Avatar billede steber Nybegynder
16. maj 2006 - 12:20 #2
Fx: SELECT name, id FROM members WHERE name like '%Klaus%'

eller: SELECT name, id FROM members WHERE upper( name) like '%KLAUS%', så du ikke er case-sensitiv. Alt efter antallet af rækker i members-tabellen (fingerpegn: er der mere eller mindre end 100.000 rækker?) skal du lave et function-based index på name feltet.
Avatar billede ircnoob Nybegynder
16. maj 2006 - 12:26 #3
Hmm ja tak,
men har jo ikke lige et specifik navn jeg kan søge på sådan der.. hvad gør man så .. I får lige det hele.. :)

public ArrayList<Member> getMemberByName(String name) throws SQLException
    {
        Connection con = DriverManager.getConnection(driverURL, username, password);
        PreparedStatement st = con.prepareStatement("SELECT name, address, zipcode, city, phone, email, bdate,licensnumber, dtfnumber, sex, trainingtype FROM Member WHERE name = ? ORDER BY name");
        st.setString(1,name);
                ResultSet rs
Avatar billede pnielsen Nybegynder
16. maj 2006 - 12:29 #4
regner med:

public ArrayList<Member> getMemberByName(String name) throws SQLException
    {
        Connection con = DriverManager.getConnection(driverURL, username, password);
        PreparedStatement st = con.prepareStatement("SELECT name, address, zipcode, city, phone, email, bdate,licensnumber, dtfnumber, sex, trainingtype FROM Member WHERE upper(name) like upper('%String name%') ORDER BY name");
        st.setString(1,name);
                ResultSet rs

Måske du lige skal rette det lidt til omkring ('%String name%')
Avatar billede ircnoob Nybegynder
16. maj 2006 - 12:37 #5
Altså .. :)

SELECT name, address, zipcode, city, phone, email, bdate,licensnumber, dtfnumber, sex, trainingtype FROM Member WHERE name = '%String name%' ORDER BY name .. sådan du siger... det fungerer desværre ikke lige .. hvad gør jeg forkkert.. ?
Avatar billede pnielsen Nybegynder
16. maj 2006 - 12:44 #6
Det er nok mere en javamand du skal spørge der...

Du skal sørge for at din parameter bliver appended ind i dit statement..

i sql ville det normalt se ud ala:

........ WHERE upper(name) = upper(''%'||String name||'%'') name ORDER BY ....

Men som sagt er det nok en java mand du skal spørge.. kan være den skal ind i en variable eller et eller andet.
Avatar billede steber Nybegynder
16. maj 2006 - 12:51 #7
Ja, en Java-mand.
Men nu tillader jeg mig alligevel at gætte løs:
Måske 1)
public ArrayList<Member> getMemberByName(String name) throws SQLException
    {
        Connection con = DriverManager.getConnection(driverURL, username, password);
        PreparedStatement st = con.prepareStatement("SELECT name, address, zipcode, city, phone, email, bdate,licensnumber, dtfnumber, sex, trainingtype FROM Member WHERE name LIKE ? ORDER BY name");
        st.setString(1,name);
                ResultSet rs
- hvor name så skal indeholde teksten %Klaus% eller hvad der nu søges på ... d.v.s. det der skal søges på incl. % først og sidst.

2)
Jeg ved godt at "standard" i Java er prepared statements p.g.a. performance, men hvis denne søgning ikke skal gentages x antal gange i sekundet/minuttet, så kan du lave et nyt SQL statement ved hver søgning, d.v.s. evt. undlade ? og st.setString(1,name); og i stedet skrive dit kriterie direkte i SQL-strengen.

Bare forslag som måske hjælper viddere ... næste trin er Java-manden.
Avatar billede ircnoob Nybegynder
16. maj 2006 - 13:03 #8
hmm tak .. kan i ikke droppe nogen svar hvis der ikke kommer yderligere hjælp her..
Avatar billede pnielsen Nybegynder
16. maj 2006 - 13:26 #9
Tag dit spørgsmål med over i java forumet så får du nok hurtigt svar
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester