# MySql Befehlssatz gesucht.



## leo476 (22. Aug 2007)

hallo,

ich möchte einen datensatz aktualisieren. es kann aber auch vorkommen das er noch gar nicht vorhanden ist.
also das update,falls datensatz vorhanden klappt wunderbar. aber wie kann ich abfragen ob ein solcher datensatz bereits in der db vorhanden ist ?


oder gibt es auch einen befehl der so in etwa geht. update, wenn nicht vorhanden dann insert.




```
statement.executeUpdate("UPDATE  Exception Set e_sdat ='"+dat+"' where e_ssenderId = '"+ssenderId+"'");
```



vielen dank

gruß
leo


----------



## P3AC3MAK3R (22. Aug 2007)

Du wirst wohl erst mit einem entsprechenden select-Statement prüfen müssen, ob der relevante Datensatz vorhanden ist.


----------



## DP (22. Aug 2007)

executeupdate gibt dir ein int zurück, wieviele sätze aktualisiert wurden. bei 0 wurde keiner aktualisiert.


----------



## FenchelT (22. Aug 2007)

Moin Leo,

leider habe ich kein MySQL zur Hand um das nach zu pruefen, ich weiss aber, dass es in in MySQL eine IF() Bedingung gibt.

D.h., Du koenntest Deinen String von der Vorstellung her so zusammenbasteln:

String sql = "IF (SELECT feld from tabelle WHERE ID = 123) > 0 THEN UPDATE deine Tabelle set dein_feld = neuer WErt ELSE INSERT INTO deine_tabelle(feld) VALUES('wert')";

Wie gesagt, ob das syntaktisch richtig ist, muesstest Du ggfls nachpruefen und aendern.
Es gibt auf www.mysql.com / .de ein umfangreiches PHP Manual.


Viele Gruesse
FenchelT


----------



## P3AC3MAK3R (22. Aug 2007)

Was spricht denn konkret gegen das folgende Vorgehen (Pseudocode)?

- prüfen, ob Datensatz vorhanden ist (select)
- wenn Datensatz vorhanden
-- Datensatz aktualisieren (update)
- sonst
-- Datensatz einfügen (insert)


----------



## FenchelT (22. Aug 2007)

P3AC3MAK3R hat gesagt.:
			
		

> Was spricht denn konkret gegen das folgende Vorgehen (Pseudocode)?
> 
> - prüfen, ob Datensatz vorhanden ist (select)
> - wenn Datensatz vorhanden
> ...



Hallo,

aus meiner Sicht nichts, ausser dass Du (und da korregiere mich bitte wenn ich falsch liege) zweimal das Statement-Objekt benoetigst.

Ich lasse prinzipiell alles, was die DB machen kann auch die DB tun, was nicht zuletzt darin begruendet ist, dass meine DB-Kenntnisse besser sind als meine Java-Kenntnisse  :roll:


----------



## DP (22. Aug 2007)

verstehe die problematik nicht.

wenn executeupdate int 0 zurückliefert, gibt es keinen entsprechenden satz in der db... wozu das ganze mit vorherigem select etc?!


----------



## FenchelT (22. Aug 2007)

DP hat gesagt.:
			
		

> verstehe die problematik nicht.
> 
> wenn executeupdate int 0 zurückliefert, gibt es keinen entsprechenden satz in der db... wozu das ganze mit vorherigem select etc?!



Wenn ich es nicht ueber SQL machen wuerde, wuerde ich auch DEine Alternative bevorzugen.
So hast Du zumindest dort wo executeUpdate > 0 zurueckliefert nur einen DB-Zugriff


----------

