0

これは私を困惑させました。

私は 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と報告されています。

私を本当に悩ませているのは、これがすべての値で発生しているわけではなく、ほんの一部であるということです。

私のアドレス クラスは、完全にばかげたゲッターとセッターを含むプレーンな古い文字列を格納しています。本当に、約束します!これは、他のダム プロパティを削除してカット アンド ペーストしたものです。

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 - 私は春の SimpleJdbcTemplate を使用しています。私が話している「疑似データベース」は、ODBC (sun.jdbc.odbc.JdbcOdbcDriver) 経由でアクセスしている ProvideX です。

4

1 に答える 1

4

ResultSet についての javadoc の記述に注意してください。したがって、デバッガーを使用して列を読み取る場合、それは 1 回の読み取りであり、コードは setAddressLine1 が呼び出されたときに 2 回目の読み取りを行います。

addressLine1 だけを見て、ResultSet をいじらない場合、どのように動作しますか?

于 2009-05-12T18:17:51.860 に答える