Dieser hat mich ratlos.Java ResultSet getString Seltsamkeit?
Ich habe ein java.sql.ResultSet bekam und ich bin String-Werte aus ihm ziehen, wie so:
address.setAddressLine1(rs.getString("AddressLine1"));
address.setAddressLine2(rs.getString("AddressLine2"));
Wenn ich debuggen und rs.getString ("AddressLine1") prüfen, um den Debugger Ich habe eine Zeichenfolge mit 30 Zeichen: "ATTN: ACCOUNTS PAYABLE" (Leerzeichen wurden entfernt). Wenn ich jedoch mein Adressobjekt unmittelbar nach dieser Zeile überprüfe, meldet es, dass AdresseLine1 eine 30-stellige Zeichenfolge aus Leerzeichen oder einem anderen Leerzeichen ist.
Wenn ich rs.getString ("AddressLine2") debugge und inspiziere, sagt der Debugger, dass ich eine 23-stellige Zeichenfolge habe: "10 Something Street" (nachgestellte Leerzeichen entfernt). Wenn ich mein Adressobjekt unmittelbar nach dieser Zeile überprüfe, wird gemeldet, dass AdresseLine2 null ist.
Was mich wirklich verrückt macht ist, dass dies nicht mit jedem Wert passiert, nur ein paar.
Meine Adressklasse speichert einfache alte Zeichenfolgen mit völlig dummen Getter und Setter. Wirklich, ich verspreche es! Dies wird geschnitten & Pasten mit anderen stummen Eigenschaften entfernt:
public class Address implements java.io.Serializable {
private static final long serialVersionUID = 1L;
private String addressLine1;
private String addressLine2;
public String getAddressLine1() {
return addressLine1;
}
public void setAddressLine1(String addressLine1) {
this.addressLine1 = addressLine1;
}
public String getAddressLine2() {
return addressLine2;
}
public void setAddressLine2(String addressLine2) {
this.addressLine2 = addressLine2;
}
}
Was zum Teufel ist hier los? Ist es ein seltsames Scoping-Problem? Ist es eine Art Zeichencodierung?
P.S. - Ich benutze Spring's SimpleJdbcTemplate, und die "Pseudo-Datenbank", mit der ich spreche, ist ProvideX, auf das ich über ODBC (sun.jdbc.odbc.JdbcOdbcDriver) zugreife.
Ich habe gerade bemerkt, dass Sie durch ODBC gehen; Wahrscheinlich möchten Sie in diesem Fall im Vergleich zu einem normalen jdbc-Treiber nach maximaler Portabilität streben. – lumpynose
Das Gleiche. Wenn ich nicht debugge und nur die Ausgabe betrachte, ist mein addressLine1-Wert eine 30 Zeichen lange Whitespace-Zeichenkette, und addressLine2 ist null. Wenn ich eine temporäre Zeichenfolge wie folgt erstellen: String tmp = rs.getString ("AddressLine1"); und debuggen, der Wert von tmp ist korrekt. Ich bin hier wirklich ratlos. – Boden
Uh, warum kannst du nicht tun? String tmp = rs.getString ("AddressLine1"); address.setAddressLine1 (tmp); '? Geht es nur darum, dem auf den Grund zu gehen? –