[Seasar-user:7595] Re: readXlsWriteDb でスペースを設定するには

Koichi Kobayashi [E-MAIL ADDRESS DELETED]
2007年 5月 11日 (金) 17:30:39 JST


小林 (koichik) です.

Date:    Fri, 11 May 2007 16:21:58 +0900
From:    "o.h." <[E-MAIL ADDRESS DELETED]>
To:      [E-MAIL ADDRESS DELETED]
Subject: [Seasar-user:7593] Re: readXlsWriteDb でスペースを設定するには

> タブとか改行をいれれたら便利かなと思いまして.

必要性があるなら検討しますが,便利かもしれない
くらいだったら先送りにさせていただければと思います.

Date:    Fri, 11 May 2007 16:34:10 +0900
From:    "o.h." <[E-MAIL ADDRESS DELETED]>
To:      [E-MAIL ADDRESS DELETED]
Subject: [Seasar-user:7594] Re: readXlsWriteDb でスペースを設定するには

> > その後,正規化されたデータを適切な型に変換する
> > 場所があります.その段階でも,文字列データは
> > trim され,空文字列は null になります.
> > この部分は DB から読み込んできたデータにも
> > 適用されますし,
> 
> ここなんですが、現時点でためしてみた限りでは DB 側で
> SPACE のものでもそのまま SPACE となって読み取れています.
> これって何かがおかしいということでしょうか.
> #そんなはずはないってことでしたら、それはそれでいいんですが

ちょっとよく分かりません.
具体的に言うと,DataRowImpl#setValue(String, Object) から
DataColumnImpl#convert(Object) が呼ばれ,その中で
カラムが CHAR や VARCHAR だと StringType クラスの
convert(Object, String) が呼び出されます.
そこで trim して空文字列なら null にして返しています.

DataRowImpl や DataColumnImpl は SqlReader と
XlsReader の両方かで使われます.
SqlReader の場合は DataTableResultSetHandler#addRow(),
XlsReader の場合は XlsReader.setupRow() から
呼び出されます.

XlsReader をインスタンス化する際に trimString が
false だと,StringType も trim しないインスタンスを
使うようにしています.
SqlReader 側は常に trim する StringType を使用します.


-- 
<component name="koichik">
    <property name="fullName">"Koichi Kobayashi"</property>
    <property name="email">"[E-MAIL ADDRESS DELETED]"</property>
    <property name="blog">"http://d.hatena.ne.jp/koichik"</property>
</component>




Seasar-user メーリングリストの案内