Probleme mit Locales
Hallo allerseits! Ich habe folgendes komisches Problem: Ich habe ein Javaprogramm, dass plötzlich das Gefühl hat, Fliesskommazahlen mit einem Komma statt einem Punkt zu formatieren. Ich habe daraufhin festgestellt, dass ich in den KDE Einstellungen in der Tat ein Komma eingetragen hatte. Das Problem ist nun, dass ich in Java einen SQL zusammenbastle, das Zahlen benutzt. Wenn nun in einer Zahl ein Komma statt des Punktes auftaucht, interpretiert das MySQL dann natürlich als Werttrenner und nicht als Fliesskommazahl. Soweit so klar. Ich habe nun in KDE die Definition auf Punkt geändert. Aber nichts passiert!! Selbst wenn ich meine Maschine neu starte, bleibt das Problem bestehen! Weiss jemand, wo ich das anpassen muss, damit das Java auch mitbekommt??? Gruss und Dank, Robert -- Diese Nachricht wurde auf Viren und Spam untersucht. BitDefender auf lise.hemirosani.ch -- Um die Liste abzubestellen, schicken Sie eine Mail an: suse-linux-unsubscribe@suse.com Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: suse-linux-help@suse.com
Am Samstag, 22. Juli 2006 13:51 schrieb Robert Kocher:
Ich habe ein Javaprogramm, dass plötzlich das Gefühl hat, Fliesskommazahlen mit einem Komma statt einem Punkt zu formatieren.
Falsche Liste -> suse-programming
Ich habe daraufhin festgestellt, dass ich in den KDE Einstellungen in der Tat ein Komma eingetragen hatte. Das Problem ist nun, dass ich in Java einen SQL zusammenbastle, das Zahlen benutzt. Wenn nun in einer Zahl ein Komma statt des Punktes auftaucht, interpretiert das MySQL dann natürlich als Werttrenner und nicht als Fliesskommazahl. Soweit so klar. Ich habe nun in KDE die Definition auf Punkt geändert. Aber nichts passiert!!
Die KDE-Einstellung dürfte hierfür vollkommen irrelevant sein.
Selbst wenn ich meine Maschine neu starte, bleibt das Problem bestehen!
Weiss jemand, wo ich das anpassen muss, damit das Java auch mitbekommt???
Gar nicht, Du darfst einen SQL String nicht so zusammenbasteln, dass er von externen Parametern abhängt, das ist fahrlässig (kennst Du die Umgebung aller Rechner, auf denen es mal laufen soll?). Wenn möglich benutze Prepared Statements und die entsprechenden Aufbereitung mit setDouble bzw. setFloat Funktionen, die kümmern sich um die entsprechende Aufbereitung. Wenn nicht möglich, schau Dir java.text.NumberFormat an, um reporduzierbare Zahlendarstellungen zu erhalten. Und Denk dran, analoge Probleme gibts natürlich auch bei Datumsfeldern oder auch Strings, einen String einfach mit ...xyz='" + String + "' ... in ein SQL Statement zu klatschen ist fahrlässig! Im Fall von MySQL müssen die Zeichen '\n', '\t', '\r', '\b', '\\' und je nachdem, was beim SQL String verwendet wurde (am besten beide), '"' oder '\'' maskiert werden, sonst kriegst Du Probleme wie SQL-Injektion oder Abstürze wegen ungültiger SQL-Statements. -- Machs gut | http://www.iivs.de/schwinde/buerger/tremmel/ | http://packman.links2linux.de/ Manfred | http://www.knightsoft-net.de -- Um die Liste abzubestellen, schicken Sie eine Mail an: suse-linux-unsubscribe@suse.com Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: suse-linux-help@suse.com
Am Samstag, 22. Juli 2006 19:19 schrieb Manfred Tremmel:
Am Samstag, 22. Juli 2006 13:51 schrieb Robert Kocher:
Ich habe ein Javaprogramm, dass plötzlich das Gefühl hat, Fliesskommazahlen mit einem Komma statt einem Punkt zu formatieren.
Falsche Liste -> suse-programming
Ich habe daraufhin festgestellt, dass ich in den KDE Einstellungen in der Tat ein Komma eingetragen hatte. Das Problem ist nun, dass ich in Java einen SQL zusammenbastle, das Zahlen benutzt. Wenn nun in einer Zahl ein Komma statt des Punktes auftaucht, interpretiert das MySQL dann natürlich als Werttrenner und nicht als Fliesskommazahl. Soweit so klar. Ich habe nun in KDE die Definition auf Punkt geändert. Aber nichts passiert!!
Die KDE-Einstellung dürfte hierfür vollkommen irrelevant sein.
Selbst wenn ich meine Maschine neu starte, bleibt das Problem bestehen!
Weiss jemand, wo ich das anpassen muss, damit das Java auch mitbekommt???
Gar nicht, Du darfst einen SQL String nicht so zusammenbasteln, dass er von externen Parametern abhängt, das ist fahrlässig (kennst Du die Umgebung aller Rechner, auf denen es mal laufen soll?). Wenn möglich benutze Prepared Statements und die entsprechenden Aufbereitung mit setDouble bzw. setFloat Funktionen, die kümmern sich um die entsprechende Aufbereitung. Wenn nicht möglich, schau Dir java.text.NumberFormat an, um reporduzierbare Zahlendarstellungen zu erhalten.
Alles einverstanden. Aber ich erstelle den SQL String mit String.format() welcher meines Wissens auf eben genau das erwähnte java.text.Numberformat zurückgreift. Und genau eben dieses scheint irgendwie mit einer Locale konfrontiert zu werden, die ihm sagt, Kommas statt Punkte zu verwenden! Dort liegt der Punkt, den ich irgendwie nicht mitkriege!!!
Und Denk dran, analoge Probleme gibts natürlich auch bei Datumsfeldern oder auch Strings, einen String einfach mit ...xyz='" + String + "' ... in ein SQL Statement zu klatschen ist fahrlässig! Im Fall von MySQL müssen die Zeichen '\n', '\t', '\r', '\b', '\\' und je nachdem, was beim SQL String verwendet wurde (am besten beide), '"' oder '\'' maskiert werden, sonst kriegst Du Probleme wie SQL-Injektion oder Abstürze wegen ungültiger SQL-Statements.
-- Machs gut | http://www.iivs.de/schwinde/buerger/tremmel/
| http://packman.links2linux.de/
Manfred | http://www.knightsoft-net.de
-- Um die Liste abzubestellen, schicken Sie eine Mail an: suse-linux-unsubscribe@suse.com Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: suse-linux-help@suse.com
-- Diese Nachricht wurde auf Viren und Spam untersucht. BitDefender auf lise.hemirosani.ch -- Um die Liste abzubestellen, schicken Sie eine Mail an: suse-linux-unsubscribe@suse.com Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: suse-linux-help@suse.com
participants (2)
-
Manfred Tremmel
-
Robert Kocher