# Nach String in MySQL datenbank suchen



## Ravenlord (22. Aug 2006)

Hallo,

ich werd nicht schlau drauss...

ich habe eine MySQL Datenbank mit 2 Spalten (Name(varchar(64)) und Punkte(tinyint(4)). Jetzt versuche ich aus meinem Java Programm alle Daten zu wählen die Name = kawieichjetztheiß haben:


```
rs = st.executeQuery("SELECT * FROM `"+punkte+"` WHERE CONVERT( `Name` USING utf8 ) = 'kawieichjetztheiß'");
```

in myPhpAdmin bekomm ich damit die gewünschten Ergebnisse, in Java allerdings nicht.

Der genaue Code sieht wie folgt aus:


```
private static boolean exists(String _name){
...
		try{			
			Class.forName(sDbDrv);
			cn = DriverManager.getConnection(sDbUrl, sUsr, sPwd);
			st = cn.createStatement();
			rs = st.executeQuery("SELECT * FROM `punkte` WHERE CONVERT( `Name` USING utf8 ) = '"+_name+"'");
			if(rs.getFetchSize()== 0){
				return false;
			}
		}
...
}
```

die FetchSize ist immer == 0 egal ob und wie oft der Name schon in der Tabelle steht 

Hab ich hier irgendwas übersehen? 

Schönen Dank schonmal!!!

Alex


----------



## DaKu (22. Aug 2006)

Versuche es mal mit LIKE

```
SELECT "Spalten_Name" FROM "Tabellen_Name" WHERE "Tabellen_Name" LIKE {MUSTER}
```

oder, wenn du nicht weisst, ob gross, oder klein geschrieben:

```
SELECT "Spalten_Name" FROM "Tabellen_Name" WHERE UPPER("Tabellen_Name") LIKE {MUSTER}
```
bzw.

```
SELECT "Spalten_Name" FROM "Tabellen_Name" WHERE LOWER("Tabellen_Name") LIKE {MUSTER}
```

und dann gibt es noch Wildcards:
mit  :arrow:  *%*


----------



## Ravenlord (22. Aug 2006)

Danke schonmal für die Hilfe!

ich hab das jetzt mal ausprobiert, mit den geschweiften Klammern bekam ich ne Exception 
com.mysql.jdbc.exceptions.MySQLSyntaxErrorException: Syntax error for TIME escape sequence '{testuser}'

dann hab ich mal folgendes probiert:

```
rs = st.executeQuery("SELECT * FROM `"+sTable+"` WHERE Name LIKE '"+_name+"'");
```
ging auch nicht

```
"SELECT * FROM "+sTable+" WHERE LOWER('Name') LIKE '"+_name+"'"
```
wollt auch nicht 

Mit Wildcards weiß ich noch nicht so ganz viel anzufangen, schließlich such ich ja den gleichen namen ...


----------



## DaKu (22. Aug 2006)

hm, ich glaube du solltest mal das:

```
while (rs.next()) 
{
	String name = rs.getString("Name");
	System.out.println("name: "+name);
}
```

vor 


```
if(rs.getFetchSize()== 0)
{ 
	return false; 
}
```

von deinem 1. Post hier einfügen und da "müsste" er den Namen auf der Konsole ausgeben


----------



## Ravenlord (22. Aug 2006)

Moin moin...

hmm des war ne gute idee...

jetzt bekomme ich den namen angezeigt, irgendwie hab ich deswegen das gefühl das es an der FetchSize liegt!
die gibt doch aus, wieviele Ergebnisse im RS sind, oder?? 
Existiert da noch eine elegantere Variante / funktionsfähige?

thx a lot!


----------



## DaKu (22. Aug 2006)

also zu dem getFetchSize() 
habe ich das:



> Liefert die Anzahl an Zeilen, die als Paket von der Datenbank an die Ergebnismenge im Hautpspeicher übertragen werden.


gefunden.

Das sagt dir aber immer noch nicht, was in der DB/Tabelle drinn steht.
Das was drinne steht holst du mit dem rs.next() raus.
Das durchläuft die Tabelle, bis es den gewünschten Eintrag gefunden hat und um es lauffähig zu bekommen, brauchst du nur in die while-Schleife das reinschreiben, was du machen möchtest


----------



## Ravenlord (22. Aug 2006)

jo also die methode soll auch nur überprüfen ob der eingegebene Name schon in der tabelle ist oder nicht...
deswegen dacht ich eigentlich das FetchSize das richtige ist...


----------



## Ravenlord (25. Aug 2006)

so habs jetz weng naja komisch gelöst, aber es geht:


```
private static boolean exists(String _name){
		setAll();
		try{			
			Class.forName(sDbDrv);
			cn = DriverManager.getConnection(sDbUrl, sUsr, sPwd);
			st = cn.createStatement();
			rs = st.executeQuery("SELECT * FROM "+sTable+" WHERE CONVERT(`Name` USING utf8) = '"+_name+"'");



                  	if(rs.next() == false){                       So gehts...
//			if(rs.getFetchSize() == 0){                Alte Variante, ging nicht



				System.out.println("does not exist");
				return false;
			}
		}
		catch(Exception ex){
			System.out.println("exists error: "+ex);
		}
		System.out.println("exists");
		return true;
	}
```


----------

