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.
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.
Vastaukset 8
Vanhimmat
Mikä sql käytössä?
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.
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
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;
}
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'