2009-05-12 20 views
0

これは私に困ってしまった。Java ResultSet getString奇妙?

私はjava.sql.ResultSetのを持っていると私はそうのようにそれのうち、文字列値を引いている:私はデバッグしrs.getString(「住所1」)、デバッガを検査する場合

address.setAddressLine1(rs.getString("AddressLine1")); 
address.setAddressLine2(rs.getString("AddressLine2")); 

"ATTN:ACCOUNTS PAYABLE"(末尾のスペースは削除されました)という30文字の文字列があります。しかし、この行の直後に私のアドレスオブジェクトを調べると、addressLine1はの空白であるまたはその他の空白の30文字の文字列であることが報告されています。

rs.getString( "AddressLine2")をデバッグして検査すると、デバッガには23文字の文字列「10 Something Street」(末尾のスペースは削除されています)があります。この行の直後にアドレスオブジェクトを検査すると、addressLine2が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; 
} 
} 

ここで何が起こっているの?それは奇妙なスコープの問題ですか?文字エンコーディングのようなものですか?

P.S. - 私は春のSimpleJdbcTemplateを使用しています。私はODBC(sun.jdbc.odbc.JdbcOdbcDriver)を介してアクセスしているProvideXを "疑似データベース"としています。

答えて

4

ResultSetについてのjavadocsのコメント:「移植性を最大限に高めるには、各行内の結果セットの列を左から右の順番で読み取る必要があります。と各列は一度だけを読み取る必要があります。したがって、デバッガを使用して列を読み込んでいるときは、それは1つの読み込みであり、コードはsetAddressLine1が呼び出されたときにもう一度読み込みます。

あなたはaddressLine1だけを見て、ResultSetを試してみてはどうでしょう?

+0

私はODBCを経由していることに気付きました。その場合、通常のjdbcドライバと比較して移植性を最大限に引き出そうとしているでしょう。 – lumpynose

+0

同じです。出力をデバッグせずに見るだけで、私のaddressLine1の値は30文字の空白文字列であり、addressLine2はnullです。 このようなtemp文字列を作成すると、次のようになります。String tmp = rs.getString( "AddressLine1");とデバッグ、tmpの値が正しいです。私は本当にここに迷っています。 – Boden

+0

ええと、なぜあなたは 'String tmp = rs.getString(" AddressLine1 "); address.setAddressLine1(tmp); '?それは今、ちょうどそれの底に着く問題ですか? –