这个让我难住了。
我有一个 java.sql.ResultSet ,我正在从中提取字符串值,如下所示:
address.setAddressLine1(rs.getString("AddressLine1"));
address.setAddressLine2(rs.getString("AddressLine2"));
当我调试和检查 rs.getString("AddressLine1") 时,调试器说我有一个 30 个字符的字符串:“ATTN: ACCOUNTS PAYABLE”(删除了尾随空格)。但是,当我在此行之后立即检查我的地址对象时,它报告 addressLine1 是一个 30 个字符串的空格或其他一些空格。
当我调试和检查 rs.getString("AddressLine2") 时,调试器说我有一个 23 个字符的字符串:“10 Something Street”(删除了尾随空格)。当我在此行之后立即检查我的地址对象时,它报告 addressLine2 is null。
真正让我抓狂的是,这并没有发生在每个值上,只有少数值。
我的地址类正在存储带有完全愚蠢的 getter 和 setter 的普通旧字符串。真的,我保证!这是删除其他愚蠢属性的剪切和粘贴:
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;
}
}
这到底是怎么回事?这是某种奇怪的范围界定问题吗?它是某种字符编码的东西吗?
PS - 我正在使用 spring 的 SimpleJdbcTemplate,我正在与之交谈的“伪数据库”是通过 ODBC (sun.jdbc.odbc.JdbcOdbcDriver) 访问的 ProvideX。