[Seasar-user:16849] Re: S2Unitを用いて、空文字列をDBにインサートしたいです。
Yoshitaka Tsuda
[E-MAIL ADDRESS DELETED]
2009年 2月 8日 (日) 03:51:37 JST
このメールは
[Seasar-user:16829] Re: S2Unitを用いて、空文字列をDBにインサートしたいです。
へのお返事です。
小林さん、ご回答いただきありがとうございます。
ご回答に基づき、こちらで調査いたしましたところ、XlsReaderがColumnTypesとは関係なしに実装されていました。
ざっと、XlsReaderを見る限り、getValueをオーバーライドすればよさそうだったので、以下のようにし、
これでExcelから読み取った値を""に置き換えられることができました。
FooXlsReader
public class FooXlsReader extends XlsReader {
public FooXlsReader(File file, boolean trimString) {
super(file, trimString);
}
... [以下、コンストラクタの定義を一通り実装] ...
@Override
public Object getValue(HSSFCell cell) {
Object o = super.getValue(cell);
if (cell.getCellType() == HSSFCell.CELL_TYPE_STRING && o == null) {
return "";
}
return o;
}
}
public class FooS2Test extends S2TestCase {
protected boolean foo = true;
public DataSet readXls(String path, boolean trimString) {
if (foo) {
return super.readXls(path, trimString);
}
DataReader reader = new FooXlsReader(convertPath(path), trimString);
return reader.read();
}
public void test0001() throws Exception {
final DataSet set = readXls("foo.xls");
final String foo =
(String)set.getTable("foo").getRow(0).getValue("foo");
assertEquals(
"foo.xlsのfooシートの2行目、fooカラムに対して、nullが帰ること",
(String)null, foo);
}
public void test0002() throws Exception {
foo = false;
final DataSet set = readXls("foo.xls");
final String foo =
(String)set.getTable("foo").getRow(0).getValue("foo");
assertEquals(
"foo.xlsのfooシートの2行目、fooカラムに対して、空文字列が帰ること",
(String)null, foo);
}
}
foo.xlsのfoo シート:
foo, hoge
, hoge
Seasar-user メーリングリストの案内