Kaikkien Sql-Lauseiden Äiti hakusessa

No tarvitsisin vielä apua sql-lauseen tekemiseen.

Eli pitäisi saada aikaan Sql-lause, joka tarkistaa tietokannasta onko siellä tämän päivän "tietuetta" eli siis esimerkiksi tänään "tietueen" nimi on 28.7.

Jos tietuetta ei löydy se tekee sen insertillä ja jos löytyy niin update.

Suomeksi sanottuna sql-lauseen pitää tarkistaa onko tietuetta olemassa ja jos ei ole niin se tekee sen ja jos on niin pelkkä päivitys.

Ps. Osaan kyllä perus sql-lauseet, mutta tuo tarkistus ja päivämäärän mukaan muodostuva kenttä vähän hakusessa.

Yllä oleva voi vaikuttaa hieman sekavalta, mutta jos joku haluaa auttaa yritän selvittää hieman tarkemmin.
8830
Äänestä

Muut lukivat myös

Vastaukset 8

Vanhimmat

Mikä sql käytössä?

Äänestä
  • Niin tosiaa käytössä on MySql.:)

    Äänestä

  • Auttaja(nyt autettava) kirjoitti:

    Niin tosiaa käytössä on MySql.:)

    Olen tehnyt Javan ja MySql:llän avulla projektin hallinta ohjelmistoa, joka on muuten valmis mutta yhtä ongelmaa en saa ratkaistua usean päivän yrityksistä huolimatta.

    ongelma:

    Eli minulla on tekstikenttä nimeltä normal hours(jTextField14), johon käyttäjä voi syöttää tekemänsä tunnit. Tallennus tietokantaan onnistuu kyllä(update, insert, delete), mutta tallennuksessa korvautuu aina edellinen talletettu arvo.

    Tarvitsisin siis apua sellaisen Sql-lauseen kanssa, joka tekisi tietokantaan päivämäärien mukaan lisää "tietueita".

    Siis Sql-lauseen pitäisi tarkistaa tietokannasta onko siellä tämän päivän "tietuetta" eli siis esimerkiksi tänään "tietueen" nimi on 28.7.
    Jos tietuetta ei löydy se tekee sen insertillä ja jos löytyy niin update. Suomeksi sanottuna sql-lauseen pitää tarkistaa onko tietuetta olemassa ja jos ei ole niin se tekee sen ja jos on niin pelkkä päivitys.

    Alla oleva on esimerkki koodia tilanteessa, jossa normalhours kenttää päivitetään:


    String paivitus1=null;
    paivitus1 = jTextField14.getText(); ///hakee käyttäjän syöttämät tunnit
    String sqlLause1= "update hours set normalhours = '" paivitus1 "'"
    "where proj_id = " proj;

    ///viimeinen rivi kohdistaa muutokset käyttäjän valitsemaan projektiin.


    Olisin erittäin kiitollinen avusta.

    Äänestä

Jos sulla on versio 4.1.0 tai uudempi, niin koitas
INSERT INTO foo (pvm, bar)
VALUES ("28.7","tööt")
ON DUPLICATE KEY UPDATE bar="w00T";

Ittellä on vanhempi eli en voinut tuota testata :(

Tän pitäisi toimia joka tapauksessa:
SELECT pvm
FROM foo
WHERE pvm="28.7"
tämä antaa tiedon, löytyykö pvm
Jos löytyy -> update, muuten insert

Äänestä
  • Olen samaa mieltä.

    Eli miksei asiaa voi hoitaa koodissa niin, että tarkistetaan löytyykö kyseisellä päivämäärällä tietuetta vai ei. Jos löytyy niin update jne.

    Miksi se pitäisi koko paketti saada siihen sql-lauseeseen? (jos oikein käsitin).

    Äänestä

  • aki kirjoitti:

    Olen samaa mieltä.

    Eli miksei asiaa voi hoitaa koodissa niin, että tarkistetaan löytyykö kyseisellä päivämäärällä tietuetta vai ei. Jos löytyy niin update jne.

    Miksi se pitäisi koko paketti saada siihen sql-lauseeseen? (jos oikein käsitin).

    Antaa virhe ilmoituksen:
    java.sql.SQLException: Can not issue SELECT via executeUpdate()

    Niin ja tuossa esimerkki koodia jos voisit hieman auttaa(koodi todella yksinkertaisesta projektinhallinta ohjelmasta jota teen):


    String proj = jTextField13.getText();//hakee käyttäjän valitseman projektin
    String paivitus1=null;
    String today=null;

    paivitus1 = jTextField14.getText(); //hakee syötetyt tunnit
    today= jTextField18.getText(); //hakee syötetyn päivämäärän

    //String sqlLause= "select count(*) from hours where proj_id = " proj;
    String sqlLause= "select days from hours where days ='2004-07-29'";
    int maara=0;
    Tietokantayhteys tietokanta = new Tietokantayhteys();
    maara = tietokanta.paivityskysely(sqlLause);
    switch(maara)
    {
    case 0: String sqlLause1= " insert into hours set normalhours = '" paivitus1 "'where proj_id = " proj " and days = '" today "'";


    case 1: String sqlLause2= "update hours set normalhours = '" paivitus1 "' where proj_id = " proj " and days = '" today "'";
    break;
    }

    Äänestä

  • Auttaja(nyt autettava) kirjoitti:

    Antaa virhe ilmoituksen:
    java.sql.SQLException: Can not issue SELECT via executeUpdate()

    Niin ja tuossa esimerkki koodia jos voisit hieman auttaa(koodi todella yksinkertaisesta projektinhallinta ohjelmasta jota teen):


    String proj = jTextField13.getText();//hakee käyttäjän valitseman projektin
    String paivitus1=null;
    String today=null;

    paivitus1 = jTextField14.getText(); //hakee syötetyt tunnit
    today= jTextField18.getText(); //hakee syötetyn päivämäärän

    //String sqlLause= "select count(*) from hours where proj_id = " proj;
    String sqlLause= "select days from hours where days ='2004-07-29'";
    int maara=0;
    Tietokantayhteys tietokanta = new Tietokantayhteys();
    maara = tietokanta.paivityskysely(sqlLause);
    switch(maara)
    {
    case 0: String sqlLause1= " insert into hours set normalhours = '" paivitus1 "'where proj_id = " proj " and days = '" today "'";


    case 1: String sqlLause2= "update hours set normalhours = '" paivitus1 "' where proj_id = " proj " and days = '" today "'";
    break;
    }

    No tuo virheilmoitus johtui com.mysql.jdbc.Driverin bugista!!! No nyt kun vaihdoin tietokanta ajurin sun.jdbc.odbc.JdbcOdbcDriveriin niin virhe onneksi katosi.

    Nyt lävähtää viimeinen kysymykseni:

    virhe ilmoitus on: java.sql.SQLException: No row count was produced
    eli joku vieläkin hieman mättää

    [CODE]
    String paivitus1=null;
    String today=null;

    paivitus1 = jTextField14.getText(); ///käyttäjän syöttämät tunnit
    today= jTextField18.getText(); //käyttäjän antama päivä


    String sqlLause= "select days from hours where days ='2004-07-29'"; int maara=0;
    Tietokantayhteys tietokanta = new Tietokantayhteys();
    maara = tietokanta.paivityskysely(sqlLause);
    switch(maara)
    {
    case 0: String sqlLause1= " insert into hours set normalhours = '" paivitus1 "'where proj_id = " proj " and days = '" today "'";


    case 1: String sqlLause2= "update hours set normalhours = '" paivitus1 "' where proj_id = " proj " and days = '" today "'";
    break;
    }
    [/CODE]

    Eli nyt lopullinen tavoite olisi se, että käyttäjä syöttää tunnit ja päivämäärän ja sql tarkistaa onko kyseiselle päivälle jo syötetty tunteja jos on niin update jos ei niin insert.

    Jos joku vielä tässä auttaa vaikenen iäksi :)
    Tähän mennessä tarjoamanne apu on ollut todella kullanarvoista, KIITOS.

    Äänestä

  • Auttaja(nyt autettava) kirjoitti:

    No tuo virheilmoitus johtui com.mysql.jdbc.Driverin bugista!!! No nyt kun vaihdoin tietokanta ajurin sun.jdbc.odbc.JdbcOdbcDriveriin niin virhe onneksi katosi.

    Nyt lävähtää viimeinen kysymykseni:

    virhe ilmoitus on: java.sql.SQLException: No row count was produced
    eli joku vieläkin hieman mättää

    [CODE]
    String paivitus1=null;
    String today=null;

    paivitus1 = jTextField14.getText(); ///käyttäjän syöttämät tunnit
    today= jTextField18.getText(); //käyttäjän antama päivä


    String sqlLause= "select days from hours where days ='2004-07-29'"; int maara=0;
    Tietokantayhteys tietokanta = new Tietokantayhteys();
    maara = tietokanta.paivityskysely(sqlLause);
    switch(maara)
    {
    case 0: String sqlLause1= " insert into hours set normalhours = '" paivitus1 "'where proj_id = " proj " and days = '" today "'";


    case 1: String sqlLause2= "update hours set normalhours = '" paivitus1 "' where proj_id = " proj " and days = '" today "'";
    break;
    }
    [/CODE]

    Eli nyt lopullinen tavoite olisi se, että käyttäjä syöttää tunnit ja päivämäärän ja sql tarkistaa onko kyseiselle päivälle jo syötetty tunteja jos on niin update jos ei niin insert.

    Jos joku vielä tässä auttaa vaikenen iäksi :)
    Tähän mennessä tarjoamanne apu on ollut todella kullanarvoista, KIITOS.

    Javaa en osaa mut sql:ssä pistää silmään jotain:

    1. Insert lauseen syntaksi on eri kuin update:
    INSERT INTO taulu(sarake1, sarake2)
    VALUES(arvo1, arvo2)
    -Huomaa myös että et luonnollisestikkaan voi pistää WHERE -ehtoa kun eihän siellä lisättäviä tietueita voi ennestään olla?

    2. Jos haet lukumäärää:
    SELECT COUNT(*)
    FROM taulu
    WHERE kentta='123'

    Äänestä

Kommentoi aloitusta


Auttaja(nyt autettava) kirjoitti:

No tarvitsisin vielä apua sql-lauseen tekemiseen.

Eli pitäisi saada aikaan Sql-lause, joka tarkistaa tietokannasta onko siellä tämän päivän "tietuetta" eli siis esimerkiksi tänään "tietueen" nimi on 28.7.

Jos tietuetta ei löydy se tekee sen insertillä ja jos löytyy niin update.

Suomeksi sanottuna sql-lauseen pitää tarkistaa onko tietuetta olemassa ja jos ei ole niin se tekee sen ja jos on niin pelkkä päivitys.

Ps. Osaan kyllä perus sql-lauseet, mutta tuo tarkistus ja päivämäärän mukaan muodostuva kenttä vähän hakusessa.

Yllä oleva voi vaikuttaa hieman sekavalta, mutta jos joku haluaa auttaa yritän selvittää hieman tarkemmin.

Anonyymi
5000

Ilmoita asiaton sisältö

  • Sisältää materiaalia, joka on loukkaavaa, herjaavaa, rasistista, uhkailevaa tai ahdistelevaa.

  • Materiaali sisältää nimiä, yhteystietoja tai muita henkilökohtaisia tietoja. Julkisuuden henkilöistä, julkisissa viroissa toimivista ihmisistä sekä yritysten vastuuhenkilöistä saa keskustella työhön liittyen. Myös yksityiselämään liittyvistä asioista voi keskustella siltä osin, kuin niistä on julkisesti kerrottu.

  • Sisältää lapsille haitallista tai heiltä kiellettyä materiaalia. Seksuaalinen sisältö on sallittua aiheeseen tarkoitetuilla palstoilla, joiden ikäraja on 18 vuotta.

  • Lainvastaista sisältöä voi olla mm. yksityiselämää loukkaavan tiedon levitys, kiihottaminen kansanryhmää vastaan, laiton uhkaaminen, alaikäisiin liittyvä seksuaalinen sisältö/grooming, petokset, identiteettivarkaudet, kunnianloukkaukset ja tekijänoikeusrikkomukset.

  • Sisältö ei liity palstan tai keskusteluketjun aiheeseen.

  • Viesti ei ole suomea tai ruotsia (pl. International Forums), se sisältää mainontaa, se sisältää tekijänoikeuksin suojattua materiaalia, se on massapostitus tai jokin muu syy.

Jaa keskustelu