[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 メーリングリストの案内