muuttuja

where osassa

Hei

Kun kysyn käyttäjältä tietoa, jonka perusteella tehdään Select-lauseen Where osa, niin miten muuttuja merkitään???

Tämä ei toimi, parametrejä puuttuu, vaikka muuttujan sisältö osataan kuitenkin lukea oikein.

String sql="SELECT As_nro,Etu_nimi,Suku_nimi FROM Asiakkaat where Etu_nimi = " nimi " ";

Ja sitten virheilmoitus


anna etunimi, ketõ haet?
Ulla
SELECT As_nro,Etu_nimi,Suku_nimi FROM Asiakkaat where Etu_nimi = Ulla
Exception in thread "main" java.sql.SQLException: [Microsoft][ODBC Microsoft Acc
ess -ohjain] Liian võhõn parametreja. Tarvitaan 1.
at sun.jdbc.odbc.JdbcOdbc.createSQLException(JdbcOdbc.java:6957)
at sun.jdbc.odbc.JdbcOdbc.standardError(JdbcOdbc.java:7114)
at sun.jdbc.odbc.JdbcOdbc.SQLExecDirect(JdbcOdbc.java:3110)
at sun.jdbc.odbc.JdbcOdbcStatement.execute(JdbcOdbcStatement.java:338)
at sun.jdbc.odbc.JdbcOdbcStatement.executeQuery(JdbcOdbcStatement.java:2
53)
at jdbc.main(jdbc.java:22)
Jatka painamalla mitä tahansa näppäintä . . .


mainin rivissä on tämmöinen koodi, joka toimii muuten

ResultSet rs = stmt.executeQuery(sql);

3

618

    Vastaukset 3

    Anonyymi (Kirjaudu / Rekisteröidy)
    5000
    • fidel1

      Virhe on se, ettet ympäröi tekstimuotoista muuttujaa yksinkertaisilla lainausmerkellä. Eli siis näin:

      "SELECT As_nro,Etu_nimi,Suku_nimi FROM Asiakkaat where Etu_nimi = '" nimi "'"

      Monesti parempi keino on tosin käyttää PreparedStatement-rajapintaa. Eli näin:

      PreparedStatement stmt = conn.prepareStatement(
      "SELECT As_nro,Etu_nimi,Suku_nimi FROM Asiakkaat where Etu_nimi = ?");
      stmt.setString(1, nimi);
      stmt.executeQuery();

      Eli SQL-lauseen muuttuja määritellään kysymysmerkeillä ja PreparedStatement-luokan set*-metodeilla laitetaan näille muuttujille arvot.

      • tietenkin

        hei

        Hipsut ja hipsut :-)

        Kirjassa väitetään ,että toi toinen vaihtoehto olisi nopeampi kyselyissä?

        Osaatko sanoa onko sillä oikeasti käytännön merkistystä, vai milloin sitä olisi parempi käyttää.

        Testailen kiinnostuksen vuoksi, mutta eihän sitä koskaan tiedä milloin pitäisi oikeasti tehdä jotain


      • fidel1
        tietenkin kirjoitti:

        hei

        Hipsut ja hipsut :-)

        Kirjassa väitetään ,että toi toinen vaihtoehto olisi nopeampi kyselyissä?

        Osaatko sanoa onko sillä oikeasti käytännön merkistystä, vai milloin sitä olisi parempi käyttää.

        Testailen kiinnostuksen vuoksi, mutta eihän sitä koskaan tiedä milloin pitäisi oikeasti tehdä jotain

        PreparedStatement-rajapinnan käyttö, eli parametrisoidut kyselyt mahdollistavat sen, että tietokanta-ajuri "kääntää" SQL-kyselyn jo valmiiksi muistiin, jolloin varsinkin jos sama kysely suoritetaan monta kertaa (esim. eri parametreilla), tuota kääntämistä ei tarvitse tehdä uudestaan ja suorituskyky teoriassa paranee. Mutta tämä on täysin riippuvainen käytetystä tietokanta-ajurista ja nopeushyöty ainakin pienissä ohjelmissa on käytännössä mitätön.

        Itse kuitenkin käytän lähestulkoon aina parametrisoituja kyselyitä jo ihan sen takia, että sitä on jotenkin siistimpi käyttää. Lisäksi se on periaatteessa hieman turvallisempaakin. Se estää väärän muotoisten parametrien käytön, joka on tärkeää varsinkin kysyttäessä käyttäjältä hakuehtoja. Jos käyttäjä esim. web-sivulla antaa hakuehdoksi jotain seuraavanlaista:

        kissa'; TRUNCATE ALL TABLES;

        ja tämä tungetaan mitään tarkistamatta select-kyselyn where-ehtoon, saattaa olla, että tietokannassa ei ole enää mitään dataa (tosin tuo truncate-lause ei taida toimia ihan noin). Parametrisoitujen kyselyiden käyttö estää tämän muuttamalla "kissa"-sanan jälkeisen hipsun oikeanlaiseksi (eli kahdeksi hipsuksi: '').

        Sinänsä käyttäjän syötteen tunkeminen suoraan SQL-lauseen osaksi ei ole koskaan järkevää, käytti parametrisointia tai ei. Lisätietoa tästä ns. SQL Injectionista antaa esim. Wikipedia: http://en.wikipedia.org/wiki/SQL_injection


    Ketjusta on poistettu 0 sääntöjenvastaista viestiä.

    Luetuimmat keskustelut

    1. Uskallanko laittaa sulle viestiä?

      Se viesti on tossa valmiina ja lähettämistä vaille valmis. Kun ei kauhee sti tunneta niin eipä sillä olisi niin väliä. S
      Ikävä
      59
      832
    2. Mikä tekee kaivatustasi

      Haluttavan?
      Ikävä
      34
      795
    3. Mies joka on oikeasti kiinnostunut

      Ja näkee sut pitkäaikaisena kumppanina, siirtää vaikka vuoria selvittääkseen asiat eikä ota pienintäkään riskiä menettää
      Ikävä
      125
      756
    4. Onko nyt kaikki asiat käyty läpi?

      Mun mielestä on👍
      Ikävä
      92
      704
    5. Vieläkin saat

      Sydämen tykyttämään. Vaikka emme näe
      Ikävä
      31
      622
    6. En tahallaan sua välttele...

      Olis niin kiva nähdä jossain muualla kuin kaupassa!
      Ikävä
      40
      537
    7. 42
      519
    8. Rauha, sopiiko

      Ei häiritä enää toisiamme. Annetaan molemmille rauha unohtaa, pyydän tätä todella. Kiitos. Miehelle.
      Ikävä
      71
      516
    9. Lehtikankaan oppilas kuolema

      Mistä lie tyttöparka löytyny, mikä ajaa tekemään itsemurhan tuon ikäsenä 😞
      Kajaani
      9
      512
    10. Ei siitä pääse yli, eikä ympäri!

      Pakko se on myöntää ja tunnustaa. Olisin halunnut p*nna sinua sydämeni kyllyydestä. Itseäni vanhemmalle naiselle
      Ikävä
      63
      509
    11. Pystyisitkö liikkumaan

      Tai tapailemaan kaivattuasi julkisesti?
      Ikävä
      45
      426
    12. Nyt kaatuu Kuisla

      Reima Kuisla hakee saneeraukseen – Joitakin velkoja on jo ulosotossa https://www.ilkkapohjalainen.fi/reima-kuisla-hakee
      Seinäjoki
      24
      420
    13. Kumpi tästä nyt

      Teki niin vaikeaa?
      Ikävä
      57
      419
    14. Minkä kappaleen

      haluaisit soivan, kun astellaan alttarille?
      Ikävä
      36
      417
    15. Kunnanhallitus

      Miten käy täällä vuosia tuomioita jakaneelle valittajalle, hovioikeus hylännyt kaikki syytteet.
      Puolanka
      23
      408
    16. Miesten (epä)viehättävyydestä kysymys

      Mieltä askarruttava asia, liki dilemma. Palstallahan jotkut miesoletetut usein toteavat, että kaikki naiset tavoittelev
      Sinkut
      104
      405
    17. Olit hyödytön.

      Mulle hyödytön..
      Ikävä
      72
      403
    18. 39
      403
    19. Vieläkö tykkäät

      Minusta niin paljon että olisit valmis?
      Ikävä
      35
      397
    20. Emme pääse koskaan

      Tästä. Sinä et suostu enkä minä suostu
      Ikävä
      38
      394
    Aihe