Nach String in MySQL datenbank suchen

Status
Nicht offen für weitere Antworten.

Ravenlord

Mitglied
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:

Code:
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:

Code:
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
 
Versuche es mal mit LIKE
Code:
SELECT "Spalten_Name" FROM "Tabellen_Name" WHERE "Tabellen_Name" LIKE {MUSTER}

oder, wenn du nicht weisst, ob gross, oder klein geschrieben:
Code:
SELECT "Spalten_Name" FROM "Tabellen_Name" WHERE UPPER("Tabellen_Name") LIKE {MUSTER}
bzw.
Code:
SELECT "Spalten_Name" FROM "Tabellen_Name" WHERE LOWER("Tabellen_Name") LIKE {MUSTER}

und dann gibt es noch Wildcards:
mit :arrow: %
 
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:
Code:
rs = st.executeQuery("SELECT * FROM `"+sTable+"` WHERE Name LIKE '"+_name+"'");
ging auch nicht
Code:
"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 ...
 
hm, ich glaube du solltest mal das:
Code:
while (rs.next()) 
{
	String name = rs.getString("Name");
	System.out.println("name: "+name);
}

vor

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

von deinem 1. Post hier einfügen und da "müsste" er den Namen auf der Konsole ausgeben
 
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!
 
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
 
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...
 
so habs jetz weng naja komisch gelöst, aber es geht:

Code:
	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;
	}
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben