Java PreparedStatement setString änderungen Charaktere
Wie im Titel: um sicher zu sein, war ich Debuggen der Anwendung ist, und so in der Linie, wo ich strings in PreparedStatement-variable, Sonderzeichen wechseln zu "?". Ich eigentlich don ' T wissen, wo zu suchen für Dinge, sollte es zu reparieren, so dass ich nicht weiß, ob der code notwendig ist.. Naja, ich Stell mal hier:
PreparedStatement stm = null;
String sql = "";
try{
sql = "INSERT INTO methods (name, description) VALUES (?, ?)";
stm = connection.prepareStatement(sql);
stm.setString(1, method.getName());
stm.setString(2, method.getDescription());
//...
}catch(Exception e){}
beim Debuggen Feld "name" korrekt-Methode-Objekt, aber nach dem hinzufügen in stm variabel, es verändert es die Zeichen '?'.
Ich habe festgestellt, ein Thema, über das ähnlich sitoatuin SO, aber es gab nicht jede Antwort, die mir helfen könnten, da ich genau weiß, dass es etwas nicht stimmt in addition string-Anweisung nicht in der Datenbank. Aber ich weiß nicht was..
Alle Anregungen?
PS. Ich bin mit netbeans 6.7.1 version
EDIT: da war ich Debuggen mit standard-netbeans-debugger, und war die überprüfung Zustand der Variablen vor dem hinzufügen von Zeichenfolgen zu 'stm' variable. Ich war auch der Wechsel getName () - Methode static string mit Sonderzeichen. So sicher ist alles ok mit der Methode class.
EDIT2: ich habe noch eine test. Geprüft stm-variable und eine seiner Eigenschaften ist "charEncoding", was ist "cp1252". Also die wichtigste Frage ist.. wie das zu ändern?
- Wie haben Sie das überprüft? Welches tool hast du benutzt, um zu überprüfen, ob die Daten in der Datenbank?
- Sagen Sie, dass der Rückgabewert von
method.getName()
geändert, nachdem es aufgerufen wurde? - Nie tun
catch(Exception e){}
- wenn eine Ausnahme passiert, werden Sie nicht wissen, dass es gemacht wird und was falsch gelaufen ist. Zumindest drucken Sie die stack-trace:catch (Exception e) { e.printStackTrace(); }
- Habe das gleiche Problem aber noch nicht fest.. ich bin mit Mysql Workbench 5.2 und Java 7. Bitte helfen Sie mir dieses Problem zu beheben
Du musst angemeldet sein, um einen Kommentar abzugeben.
Klingt wie ein character encoding Problem für mich. Vielleicht ist der Fahrer transcoding deine Saiten in der entsprechenden Codierung für das Feld/Tabelle/schema/Datenbank, anstatt das der server es tun? Wenn Sie versuchen, speichern Sie einen Charakter, die keine Vertretung im encoding des Feld/Tabelle/schema/Datenbank, das wäre eine Erklärung für die'? ' - Zeichen.
dies geschieht in der Regel durch mit verschiedenen Zeichensätzen in verschiedenen Orten. klingt wie Sie ' re immer Ihre Eingaben als UTF-8 Konvertierung in andere chatset (vielleicht deine Datenbank ist etwas anderes) bricht den besonderen Charakter.
dieses Problem zu beheben: verwenden Sie den gleichen Zeichensatz überall*. (ich würde empfehlen die Verwendung der UTF-8)
*werfen Sie einen Blick auf diese oder meine Antwort zu einem anderen thread (das ist über ein problem in php, sondern in java, es ist fast das gleiche)
Sind Sie mit Oracle? Ich habe ähnliche Situationen, wenn die environment-Variablen über Zeichensätze nicht korrekt definiert.
Standardmäßig eine Oracle-Verbindung ist ASCII (7-bit-Zeichen, A-Z, a-z, zahlen, Satzzeichen, ...). Wenn Sie alle Zeichen, die außerhalb dieses (z.B. Europäische Akzente, chinesische Zeichen, ..), dann müssen Sie etwas anderes als ASCII. UTF-8 ist am besten. Wenn Sie nicht, Ihre Zeichen ersetzt werden durch "?".
Würden Sie brauchen, um Ihr sysadmin, um diese Einrichtung für Sie. Alternativ nehmen Sie einen Blick hier:
http://arjudba.blogspot.com/2009/02/what-is-nlslang-environmental-variable.html