# DB auf Wert überprüfen



## Schaaaf (25. Okt 2010)

Hallo,

ich möchte die erste Spalte _id_ meiner DB _test _ nach einem bestimmten Wert durchsuchen lassen. Ist dieser vorhanden, dann tue irgendwas, wenn nicht dann schreibe ihn hinein.

Wie realisiere ich das am besten?


----------



## XHelp (25. Okt 2010)

Welcher DB?
Aber generell: deinen ggf. Vohandenen Satz mit SELECT abfragen, wenn das ResultSet 0 Einträge hat, ist es nicht da, wenn es 1 Eintrag hat, dann ist es da.

Falls du es aber eher so meinst: "wenn es nicht da ist, hinzufügen, wenn es da ist - ändern" und es sich um mysql handelt, dann kannst du auch "insert ... on duplicate key update" verwenden


----------



## Schaaaf (26. Okt 2010)

Sorry, ich rede natürlich von MySQL.
Mit SELECT abfragen, ok... Aber wie teste ich wieviele Einträge das ResultSet hat?


----------



## XHelp (26. Okt 2010)

Kannst ja sowas wie:

```
rs.last();
int count = rs.getRow();
```
machen


----------



## Marcinek (26. Okt 2010)

select count(*) as anzahl from foo where id = bar


Ist schneller, als das o.g.


----------



## Schaaaf (26. Okt 2010)

> select count(*) as anzahl from foo where id = bar



foo ist meine DB und bar der wert für id, aber was ist anzahl?


----------



## XHelp (26. Okt 2010)

anzahl ist einfach nur ein Name für "count(*)", welchen du selber frei definierst.


----------



## Schaaaf (27. Okt 2010)

Ich mache also folgendes :

Statement stmt_1 = con.createStatement();		
ResultSet rs_1 = stmt_1.executeQuery		
("SELECT COUNT(*) AS anzahl FROM db WHERE ID = '12'");

Aber wie komme ich nun an die Information, ob der Wert bereits vorhanden oder nicht?
Wo steht der drin und wie kann ich ihn ausgeben lassen?

Habe es so gelöst :
 while(rs_1.next()) 
         {
       	  System.out.println(rs_1.getString("anzahl"));
         }


----------



## XHelp (27. Okt 2010)

Naja, wenn "anzahl", was übrigens eine Zahl ist, =0 ist, dann ist der Eintrag nicht vorhanden. Wenn es >0 ist, dann ist er vorhanden.


----------



## ARadauer (27. Okt 2010)

> Wo steht der drin und wie kann ich ihn ausgeben lassen?


Da es dir ja gar nicht um die anzahl geht, würde ich das mit dem count nicht machen. Sondern einfach ein normales select
"select name, alter, usw from kunden"...

war rs.next false, gab es keinen datensatz.

Ich würde mir auch mal die SQL Grundlagen ansehen: SQL Syntax


----------



## Marcinek (27. Okt 2010)

Wenn es dir nicht um die Anzahl geht, dann würde ich sogar

select 1 from machen.

Dann aber nicht wie oben zur lezten Reihe gehen.

und from ist die tabelle und nicht datenbank -.-:rtfm::rtfm::rtfm::rtfm::rtfm::rtfm:


----------



## ARadauer (27. Okt 2010)

Wenns wirklich oft gemacht wird, im bereich batch processing, ist das sicher nochmal was wo man performance raus hohlen kann. Werd ich mir merken.


----------



## Marcinek (27. Okt 2010)

Ansonsten Limit 1


----------



## Schaaaf (1. Nov 2010)

Für alle, die es nicht mitbekommen haben, ich hatte meinen Beitrag gleich editiert, da ich selbst auf ne sinnvolle Lösung gekommen bin.
Danke


----------

