Tach Zusammen,
ich habe ein ziemlich stranges Problem, wenn ich versuche einen String per SQL zu vergleichen. Ich habe (als Teil einer größeren Anwendung, deswegen hier nur ein ganz kleiner Ausschnitt) eine Tabelle mit Freitexten
Nun hole ich mir eine Liste aller values und versuche danach die id's anhand der values herrauszufinden:
Der Witz ist nun, dass dies bei ca. 100 Werten (von 10k) nicht klappt. Wenn ich allerdings folgendes mache, dann klappt es (und da hört irgendwie mein Verständnis auf):
Die Tabelle ist UTF-8. MySQL 5.0.18 und MySQL-Connector 3.1.12.
Folgender Beispiel-Code:
Da ich mit meinem Latain nun langsam am Ende bin, bin ich für jede (noch so abwegige) Idee dankbar!!
Gruß, Mark
PS: Die Werte, bei denen das matchen nicht klappt, weisen keine besondere Charakteristika auf...
ich habe ein ziemlich stranges Problem, wenn ich versuche einen String per SQL zu vergleichen. Ich habe (als Teil einer größeren Anwendung, deswegen hier nur ein ganz kleiner Ausschnitt) eine Tabelle mit Freitexten
Code:
create table all_values(
id int(11) PRIMARY KEY not null,
value text)
Nun hole ich mir eine Liste aller values und versuche danach die id's anhand der values herrauszufinden:
Code:
"select * from all_values where value=\""+value+"\";
Der Witz ist nun, dass dies bei ca. 100 Werten (von 10k) nicht klappt. Wenn ich allerdings folgendes mache, dann klappt es (und da hört irgendwie mein Verständnis auf):
Code:
"select * from all_values where value=\""+value+"\" and id="+id+";
Die Tabelle ist UTF-8. MySQL 5.0.18 und MySQL-Connector 3.1.12.
Folgender Beispiel-Code:
Code:
private void testDbValuesOhnePrep(){
try{
String statement = "select id,value from all_values;";
Statement stmt = _conn.createStatement();
ResultSet result = stmt.executeQuery(statement);
Hashtable<Integer,String> hash = new Hashtable<Integer,String>();
while (result.next()){
hash.put(result.getInt(1),result.getString(2));
}
result.close();
int counter = 0;
for (int key : hash.keySet()) {
// Dies würde klappen
//String statement2 = "select * from all_values where value=\""+hash.get(key)+"\" and id="+key+";";
// Dies klappt nicht immer
String statement2 = "select * from all_values where value=\""+hash.get(key)+"\";";
ResultSet result2 = stmt.executeQuery(statement2);
if(!result2.next()){
counter++;
System.out.println("fehler bei id "+key+" und value <"+hash.get(key)+">");
}
result2.close();
}
System.out.println("ingesamt "+counter);
} catch (SQLException e){
e.printStackTrace();
}
}
Da ich mit meinem Latain nun langsam am Ende bin, bin ich für jede (noch so abwegige) Idee dankbar!!
Gruß, Mark
PS: Die Werte, bei denen das matchen nicht klappt, weisen keine besondere Charakteristika auf...