【问题标题】:Java ResultSet getString weirdness?Java ResultSet getString 怪异?
【发布时间】:2009-05-12 18:10:25
【问题描述】:

这个让我难过。

我有一个 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 为 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;
 }
}

这到底是怎么回事?这是某种奇怪的范围界定问题吗?是不是某种字符编码的东西?

附: - 我正在使用 spring 的 SimpleJdbcTemplate,我正在与之交谈的“伪数据库”是通过 ODBC (sun.jdbc.odbc.JdbcOdbcDriver) 访问的 ProvideX。

【问题讨论】:

    标签: java jdbc resultset


    【解决方案1】:

    请注意 javadocs 对 ResultSet 的评价:“为了获得最大的可移植性,每行中的结果集列应按从左到右的顺序读取,每列应仅读取一次。”因此,当您使用调试器读取该列时,这是一次读取,然后您的代码会在调用 setAddressLine1 时再次读取它。

    当您只查看 addressLine1 而不摆弄 ResultSet 时,它的行为如何?

    【讨论】:

    • 我刚刚注意到您正在通过 ODBC;在这种情况下,与常规的 jdbc 驱动程序相比,您可能想要争取最大的可移植性。
    • 同理。当我不调试只看输出时,我的 addressLine1 值为 30 个空格字符串,addressLine2 为空。如果我像这样创建一个临时字符串: String tmp = rs.getString("AddressLine1");并调试,tmp 的值是正确的。我真的很茫然。
    • 呃,你为什么不能String tmp = rs.getString("AddressLine1"); address.setAddressLine1(tmp);?现在只是追根究底了吗?
    • 其实我只是尝试过...同样的结果。它在调试器中的行为方式不是非常可预测的。
    • 好的,我在我的代码中发现了一个错误,我检查了一个列两次。解决这个问题并根据 Lumpynose 的建议(例如从左到右的阅读顺序)让事情变得更好,让一切正常。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-09
    • 1970-01-01
    • 2022-11-16
    • 2015-10-13
    • 2012-10-29
    • 2021-08-04
    • 2018-12-11
    相关资源
    最近更新 更多