# Abfragen auf Vorhanden



## Sensewell (8. Okt 2008)

Hallo Leute,

ich schreibe in ein Textfeld.Beim Eintippen in das Textfeld möchte ich, dass im Hintergrund (beim verlassen der maus oder durch tab) das das Textfeld geprüft wird ob der Inhalt des textes bereits in einer Spalte einer datenbank vorhanden ist.

Arbeite mit Mysql und 5.1.6 connector. Habe bereits ein Select where in einem String und danach mach ich folgendes: ich übergebe den String der database methode die damit folgendes macht:


```
Statement st;

		st = cn.createStatement();
		st.execute(query);
		cn.close();
```


query ist der String. CN ist ebenfalls vorhanden und habe auch schon geprüft ob sie geht.  Meine frage ist nun: was brauche ich um rauszufinden ob der datensatz shcon vorhanden ist? Am besten wäre etwas was true oder false zurück gibt.

LG und schönen ABend.


----------



## SlaterB (8. Okt 2008)

select * oder count(*) from irgendwas where irgendwas aus dem Textfeld

wenn Ergebnismenge leer, dann false, sonst true


----------



## Sensewell (9. Okt 2008)

Danke für deine Antwort.In was speichere ich denn die Ergebnismenge?Resultset? LG


----------



## SlaterB (9. Okt 2008)

genau, ResultSet, 
vorher zu wissen, was JDBC ist, wird sich als Vorteil herausstellen


----------



## Sensewell (10. Okt 2008)

Ich habe mir nun eine Connection aufgebaut.


```
public static void main (String args[]) throws InstantiationException, IllegalAccessException{
		try{
			Class.forName("com.mysql.jdbc.Driver");
			}
		catch(ClassNotFoundException e){
			e.printStackTrace();
			System.exit(1);
		}
		try{
			con = DriverManager.getConnection("jdbc:mysql://localhost:8854/db","user","pw");
			stmt= con.createStatement();
			rs = stmt.executeQuery("SELECT Interpret FROM cdindex WHERE Interpret='Test'");
			System.out.println(rs.getArray(0));
			while (rs.next()){
				if (!rs.getString(1).equals("Test")){
					System.out.println("nicht vorhanden");
				}
			}
		
		stmt.close();
		con.close();
	}
		catch (SQLException e){
			e.printStackTrace();
			return;
		}
```

in der Datenbank ist Test nicht enthalten, andere Interpreten aber schon. Wieso gibt er mir nichts aus? Erhalte keine Fehlermeldung...


----------



## maki (10. Okt 2008)

Sieh dir mal die while Bedingung an.


----------



## Sensewell (10. Okt 2008)

hm weiss nicht was du meinst....


----------



## SlaterB (10. Okt 2008)

Sieh dir mal die WHERE Bedingung an.

die Abfrage rs.getArray(0) vor dem ersten next()-Aufruf müsste aber das ganze schon abbrechen oder?


----------



## Sensewell (10. Okt 2008)

Wenn ich die Where bedingung in den mysql query browser eingebe bekomm ich auch kein syntax fehler?!


----------



## SlaterB (10. Okt 2008)

es geht nicht um Syntaxfehler sondern um deine Frage, warum die keine Nicht-Test-Interpreten erhälst


----------



## Sensewell (10. Okt 2008)

Jetzt bin ich aber ganz durcheinander.ich möchte doch nur prüfen ob Test in der db ist oder nicht.


----------



## SlaterB (10. Okt 2008)

dann noch mal ohne jeden intelligenten Zaunpfahl:

> in der Datenbank ist Test nicht enthalten, andere Interpreten aber schon. Wieso gibt er mir nichts aus?

deine DB-Afrage fragt nur nach Interpreten mit WHERE Interpret='Test' ab,
also können im ResultSet gar keine Interpreten mit anderem Wert enthalten sein,

dass eine Spalte genau wie die Tabelle heißt, ist übrigens generell schlecht, falls es überhaupt funktioniert

-------

wenn du noch andere Fragen hast, dann bitte neu stellen


----------



## maki (10. Okt 2008)

> while (rs.next())


Na, wie oft wird die Schleife durchlaufen wenn das RS leer ist?


----------



## Sensewell (10. Okt 2008)

jetzt klingelts.

Ich hab keine spalte die gleich wie die tabelle heisst. die tabelle heisst cdindex.?!


```
rs = stmt.executeQuery("SELECT * FROM cdindex WHERE Interpret = 'Test'");
			if (rs.equals("Test")){
				System.out.println("vorhanden");
			}
			else{
				System.out.println("nicht vorhanden");
			}
		
		stmt.close();
		con.close();
	}
		catch (SQLException e){
```

ist im resultset alle werte der spalte enthalten?oder prüfe ich mit rs.equals("Test") nur auf den ersten wert der spalte?


----------



## SlaterB (10. Okt 2008)

> Ich hab keine spalte die gleich wie die tabelle heisst. die tabelle heisst cdindex.?! 

ok, mein Lese-Fehler 

--------

> rs.equals("Test")){ 

was ist denn das jetzt für ein Code, wieso vergleichst du ein ResultSet mit einem String?
geht gar nicht, vorher war vieles richtig

> oder prüfe ich mit rs.equals("Test") nur auf den ersten wert der spalte?

was sinnvolles machst du damit gewiss nicht

> ist im resultset alle werte der spalte enthalten?

gibt die Query in deinen Query-Browser ein und schau dir die Ergebnisse an,
genau so viele Ergebnisse bekommst du hier auch mit gleichen Aufbau

bevor du etwas programmierst musst du erstmal wissen was SQL ist


----------



## maki (10. Okt 2008)

Weiss zwar nicht was da klingelt, aber du stehst immer noch auf dem Schlauch 

Kurz:
Du sagst in deinem SQL Statement  "gib mir alle Datensätze in denen der Interpret gleich 'test' ist"

Es gibt keine solchen Datensätze.

Dann sagst du in diener while Schleifenbedingung ""gehe alle Ergebnisse durch", es gibt aber keine Ergebnisse, also wird die Schleife NIE durchlaufen.

Alles klar?


----------



## Sensewell (10. Okt 2008)

was sql ist , weiss ich schon. Nur mit java ist es ein wenig schwierig 

wie vergleiche ich denn einen String den ich suche mit dem resultset ob er im resultset enthalten ist?


----------



## SlaterB (10. Okt 2008)

so wie du es anfangs hattest, abgesehen von
> System.out.println(rs.getArray(0));


----------



## Sensewell (10. Okt 2008)

maki hat gesagt.:
			
		

> Weiss zwar nicht was da klingelt, aber du stehst immer noch auf dem Schlauch
> 
> Kurz:
> Du sagst in deinem SQL Statement  "gib mir alle Datensätze in denen der Interpret gleich 'test' ist"
> ...




Ich habe nun einen Select * befehl. somit ist was im resultset.War dann der ansatz (erster post) wieder richtig?


----------



## SlaterB (10. Okt 2008)

keiner hat was anderes behauptet,


weniger interpretieren sondern genau sagen was du wie verstehst und warum du wie den Code änderst usw.,
dass die anfänglichen Antworten wie 'schau dir mal xy an' bei dir zu ungenau waren, haben maki und ich inzwischen ja auch gelernt


----------



## Sensewell (10. Okt 2008)

. Das ist nett von euch  :lol: 

Ich glaub das essen war heute bei uns schlecht, ich blicks immer noch nicht:



```
rs = stmt.executeQuery("SELECT Interpret FROM cdindex;");
			  while (rs.next()){ 
		            if (!rs.getString(1).equals("Test")){ 
		               System.out.println("nicht vorhanden"); 
		            } 
		         
			else{
				System.out.println("nicht vorhanden");
			}
```



nun gibt er mir aus:

nicht vorhanden
nicht vorhanden
nicht vorhanden


Der Fehler ist mir klar. Wie kann ich denn die größe des rs auslesen? müsste ja den rs druchlaufen. das tu ich im moment ja nicht sondern gehe nur auf getString(1).

Sowas wie:

int i rs.size();

getString(i)
und das dann in ne for schleife....


----------



## SlaterB (10. Okt 2008)

http://www.google.de/search?hl=de&q=java+resultset+anzahl+ergebnisse&meta=


durchlaufen kannst du ein ResultSet aber immer nur per next() und Schleife usw.,

getString(i), wobei i was mit der Anzahl der Ergebnisse zu tun hat, klingt übel


-----

oder meinst du die Anzahl Spalten/ Attribute? wirst du auch bei google finden, oder wie du von deinem Tutorial kennen solltest: ResultSetMetaData


----------



## Guest (10. Okt 2008)

```
stmt= con.createStatement();
rs = stmt.executeQuery("SELECT Interpret FROM cdindex WHERE Interpret='Test'"); 
if(rs.next())
   System.out.println("vorhanden");
else
   System.out.println("nicht vorhanden");
```


----------



## Sensewell (10. Okt 2008)

Das ist alles was ich wollte! Danke an Gast  Sorry an die anderen, dass ich mich nicht artikulieren konnte!


----------

