[Seasar-user:7557] 【 S2Unit 】 DB2+ バイナリ +readXlsAllReplaceDb で例外

[E-MAIL ADDRESS DELETED] [E-MAIL ADDRESS DELETED]
2007年 5月 9日 (水) 16:43:48 JST


せとあずさです。

DB2 8.2 + Seasar2.4.12 + JDK1.4.2.12で、varchar() for bit dataな
カラムを持つテーブルにS2UnitでExcelのテストデータを投入したいと思ってい
ます。

最初、S2TestCaseのwriteXls()でできたExcelファイルを
readXlsAllReplaceDb(複数DataSource対応のためカスタマイズしていま
すが)で投入しようとしたところ、末尾につけたように例外になりました。

そこでorg.seasar.extension.jdbc.types.BinaryTypeのbindValue
メソッドを以下のように修正したところ、投入が出来るようになりました。

        if (value == null) {
            ps.setNull(index, Types.BINARY);
//        } else if (value instanceof byte[]) {
//            byte[] ba = (byte[]) value;
//            InputStream in = new ByteArrayInputStream(ba);
//            ps.setBinaryStream(index, in, ba.length);
        } else {
            ps.setObject(index, value);
        }

要はsetBinaryStreamでなくsetObjectを使用すれば投入できている
ということなのですが、この場合、どのように対応するのがいいでしょ
うか?また、似たような事例をお持ちの方いらっしゃらないでしょうか?

以上、よろしくお願いします。


*********************以下、スタックトレース
org.seasar.framework.exception.SQLRuntimeException: [ESSR0071]SQLで例外(ErrorCode=-301, SQLState=07006)が発生しました。理由はorg.seasar.framework.exception.SSQLException: [ESSR0072]SQLで例外(SQL=[INSERT INTO (SQL文省略)], ErrorCode=-301, SQLState=07006)が発生しました
	at org.seasar.framework.util.PreparedStatementUtil.executeUpdate(PreparedStatementUtil.java:45)
	at org.seasar.extension.jdbc.impl.BasicUpdateHandler.execute(BasicUpdateHandler.java:76)
	at org.seasar.extension.jdbc.impl.BasicUpdateHandler.execute(BasicUpdateHandler.java:63)
	at org.seasar.extension.dataset.states.AbstractRowState.execute(AbstractRowState.java:48)
	at org.seasar.extension.dataset.states.AbstractRowState.update(AbstractRowState.java:41)
	at org.seasar.extension.dataset.impl.SqlTableWriter.doWrite(SqlTableWriter.java:59)
	at org.seasar.extension.dataset.impl.SqlTableWriter.write(SqlTableWriter.java:52)
	at org.seasar.extension.dataset.impl.SqlWriter.write(SqlWriter.java:46)
	at jp.co.xxxx.unit.xxxx.xxxxTestCase.writeDb(xxxxTestCase.java:66)
	at jp.co.xxxx.unit.xxxx.xxxxTestCase.readXlsAllReplaceDb(xxxxTestCase.java:148)
	at jp.co.xxxx.unit.xxxx.ExcelTest.testReadTx(ExcelTest.java:17)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:324)
	at junit.framework.TestCase.runTest(TestCase.java:154)
	at org.seasar.framework.unit.S2FrameworkTestCase.doRunTest(S2FrameworkTestCase.java:306)
	at org.seasar.extension.unit.S2TestCase.doRunTest(S2TestCase.java:92)
	at org.seasar.framework.unit.S2FrameworkTestCase.runBare(S2FrameworkTestCase.java:189)
	at junit.framework.TestResult$1.protect(TestResult.java:106)
	at junit.framework.TestResult.runProtected(TestResult.java:124)
	at junit.framework.TestResult.run(TestResult.java:109)
	at junit.framework.TestCase.run(TestCase.java:118)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:478)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:344)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)
Caused by: org.seasar.framework.exception.SSQLException: [ESSR0072]SQLで例外(SQL=[SQL文省略], ErrorCode=-301, SQLState=07006)が発生しました
	at org.seasar.extension.jdbc.impl.PreparedStatementWrapper.wrapException(PreparedStatementWrapper.java:62)
	at org.seasar.extension.jdbc.impl.PreparedStatementWrapper.wrapException(PreparedStatementWrapper.java:57)
	at org.seasar.extension.jdbc.impl.PreparedStatementWrapper.executeUpdate(PreparedStatementWrapper.java:81)
	at org.seasar.framework.util.PreparedStatementUtil.executeUpdate(PreparedStatementUtil.java:43)
	... 25 more
Caused by: com.ibm.db2.jcc.c.SqlException: DB2 SQL error: SQLCODE: -301, SQLSTATE: 07006, SQLERRMC: 6
	at com.ibm.db2.jcc.c.fg.d(fg.java:1340)
	at com.ibm.db2.jcc.b.gb.k(gb.java:351)
	at com.ibm.db2.jcc.b.gb.a(gb.java:60)
	at com.ibm.db2.jcc.b.w.a(w.java:52)
	at com.ibm.db2.jcc.b.wb.c(wb.java:213)
	at com.ibm.db2.jcc.c.gg.ab(gg.java:1779)
	at com.ibm.db2.jcc.c.gg.d(gg.java:2324)
	at com.ibm.db2.jcc.c.gg.W(gg.java:457)
	at com.ibm.db2.jcc.c.gg.executeUpdate(gg.java:440)
	at org.seasar.extension.jdbc.impl.PreparedStatementWrapper.executeUpdate(PreparedStatementWrapper.java:79)
	... 26 more



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