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 oikein ymmärsin, niin PHP:llä tuo olisi yksinkertainen toteuttaa:
<?php $result = mysql_query ( " select tietue from taulu where pvm = '28.7.2004' " ); $rivimaara = mysql_num_rows($result); if ( $rivimaara > 0 ) { insert into taulu... } elseif ( $rivimaara == 0 ) { update taulu } ?>
Tuossa oli siis käytännössä se perusidea. Testaa ja sitten tee jos ehto täyttyy.
Sitten en muista MySQL:n syntaksia ulkoa, mutta monissa tietokannoissa on käsky nimeltä EXISTS. Se palauttaa arvoksi TRUE tai FALSE eli onko riviä olemassa vai ei.
Eli lähde purkamaan asiaa niin, että ensin kokeilet kyseistä riviä SELECT käskyllä ja jos tuloksessa on vähintään yksi rivi tai enemmän, niin silloin UPDATE ja muuten INSERT. Ainakin niin tekisin itse ja sitten toissijaisesti hyödyntäisin tuota EXISTS funktiota. Silläkin olisi aika helppo rakentaa suoraan tuollainen ja saada se yhteen SQL lauseeseen vielä mahtumaankin.
Nyt lävähtää viimeinen kysymykseni:
virhe ilmoitus on: java.sql.SQLException: No row count was produced
eli joku vieläkin hieman mättää
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; }
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.
Pahoittelen purkkakorjaus ehdotustani (En ole javalla tehnyt SQL:llää), mutta korjaus menee jotensakin näin:
Korjattava metodi on paivityskysely.
import ... ... public class Tietokantayhteys { ... public int paivityskysely(String kysely) { int ret=1; ... try { ... ??? = ???.executeQuery(kysely); ... } catch (SQLException e ) { ret = 0; } catch (Exception e) { System.out.println("Exception:"+e.toString()); } ... return ret; } ... }
Toivottavasti tästä on enemmän hyötyä kuin haittaa...
Aihe on jo aika vanha, joten et voi enää vastata siihen.