[Seasar-user:20080] [S2Unit, S2JUnit4] Excelシートへのバイトデータの投入方法

Hiroyoshi Takiguchi [E-MAIL ADDRESS DELETED]
2010年 8月 16日 (月) 14:17:01 JST


お世話になっております。 瀧口と申します。

S2JUnit4を活用させていただいております。
S2Unit, S2JUnit4両方に共通したノウハウだと思うのですが、
Excelを使った初期データ投入の際にbytea型のカラムに
レコードを投入する方法をご存じの方がいらっしゃいましたら、
教えていただけないでしょうか?

ソースをたどると、
org.seasar.extension.dataset.impl.XlsReader
の中でセルの型判定をしているようで、
Apache POIのHSSFDataFormでフォーマットを識別しているようです。
org.seasar.extention.dataset.DataSetConstants#BASE64_FORMAT
に
"¥¥B¥¥:@"
(¥は実際は半角です。)
とあるのでこの形式で投入するのかと思い、Excelのセルの書式設定で
ユーザ定義でこの形式にしようとしましたが、Excelでは指定できない形式のようです。

以下にスタックトレースを添付します。

org.seasar.framework.exception.SQLRuntimeException:
[ESSR0072]SQLで例外(SQL=[INSERT INTO role (ID, NAME, RIGHTS) VALUES (?,
?, ?)], Message=[[ESSR0072]SQLで例外(SQL=[INSERT INTO role (ID, NAME,
RIGHTS) VALUES (?, ?, ?)], Message=[0], ErrorCode=42804,
SQLState={3})が発生しました : [SQLで例外(Message=[ERROR:
列"rights"は型byteaですが、式は型character varyingでした
  Hint: 式を書き換えるかキャストしなければなりません
  Position: 53], ErrorCode=0, SQLState=42804)が発生しました。], [ERROR:
列"rights"は型byteaですが、式は型character varyingでした
  Hint: 式を書き換えるかキャストしなければなりません
  Position: 53], ErrorCode=0, SQLState=42804)が発生しました
	at org.seasar.framework.util.PreparedStatementUtil.executeUpdate(PreparedStatementUtil.java:68)
	at org.seasar.extension.jdbc.impl.BasicUpdateHandler.execute(BasicUpdateHandler.java:102)
	at org.seasar.extension.jdbc.impl.BasicUpdateHandler.execute(BasicUpdateHandler.java:80)
	at org.seasar.extension.dataset.states.AbstractRowState.execute(AbstractRowState.java:63)
	at org.seasar.extension.dataset.states.AbstractRowState.update(AbstractRowState.java:39)
	at org.seasar.extension.dataset.impl.SqlTableWriter.doWrite(SqlTableWriter.java:75)
	at org.seasar.extension.dataset.impl.SqlTableWriter.write(SqlTableWriter.java:62)
	at org.seasar.extension.dataset.impl.SqlWriter.write(SqlWriter.java:59)
	at org.seasar.framework.unit.impl.SimpleDataAccessor.writeDb(SimpleDataAccessor.java:166)
	at org.seasar.framework.unit.impl.DataAccessorImpl.writeDb(DataAccessorImpl.java:70)
	at org.seasar.framework.unit.impl.SimpleDataAccessor.readXlsAllReplaceDb(SimpleDataAccessor.java:218)
	at org.seasar.framework.unit.impl.DataAccessorImpl.readXlsAllReplaceDb(DataAccessorImpl.java:112)
	at org.seasar.framework.unit.impl.TestDataPreparerImpl.prepare(TestDataPreparerImpl.java:143)
	at org.seasar.framework.unit.impl.TestDataPreparerImpl.prepare(TestDataPreparerImpl.java:106)
	at org.seasar.framework.unit.impl.SimpleInternalTestContext.prepareTestData(SimpleInternalTestContext.java:266)
	at org.seasar.framework.unit.S2TestMethodRunner.runTest(S2TestMethodRunner.java:611)
	at org.seasar.framework.unit.S2TestMethodRunner.runMethod(S2TestMethodRunner.java:250)
	at org.seasar.framework.unit.S2TestMethodRunner.run(S2TestMethodRunner.java:166)
	at org.seasar.framework.unit.S2TestClassMethodsRunner.invokeTestMethod(S2TestClassMethodsRunner.java:227)
	at org.seasar.framework.unit.S2TestClassMethodsRunner.run(S2TestClassMethodsRunner.java:89)
	at org.seasar.framework.unit.S2TestClassRunner.run(S2TestClassRunner.java:67)
	at org.seasar.framework.unit.Seasar2.run(Seasar2.java:179)
	at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:46)
	at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
Caused by: org.seasar.framework.exception.SSQLException:
[ESSR0072]SQLで例外(SQL=[INSERT INTO role (ID, NAME, RIGHTS) VALUES (?,
?, ?)], Message=[0], ErrorCode=42804, SQLState={3})が発生しました
	at org.seasar.extension.jdbc.impl.PreparedStatementWrapper.wrapException(PreparedStatementWrapper.java:72)
	at org.seasar.extension.jdbc.impl.PreparedStatementWrapper.wrapException(PreparedStatementWrapper.java:67)
	at org.seasar.extension.jdbc.impl.PreparedStatementWrapper.executeUpdate(PreparedStatementWrapper.java:91)
	at org.seasar.framework.util.PreparedStatementUtil.executeUpdate(PreparedStatementUtil.java:66)
	... 27 more
Caused by: org.postgresql.util.PSQLException: ERROR:
列"rights"は型byteaですが、式は型character varyingでした
  Hint: 式を書き換えるかキャストしなければなりません
  Position: 53
	at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2062)
	at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1795)
	at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:257)
	at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:479)
	at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:367)
	at org.postgresql.jdbc2.AbstractJdbc2Statement.executeUpdate(AbstractJdbc2Statement.java:321)
	at org.seasar.extension.jdbc.impl.PreparedStatementWrapper.executeUpdate(PreparedStatementWrapper.java:89)
	... 28 more


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