readXlsAllReplaceDbでエクセルからのTimestampがうまく入らない。
S2DaoTestCaseを使って、
単体テストを作成。
その際に、期待値をreadXlsAllReplaceDb
を使用して、エクセルから投入している。
ここで、Timestamp型のデータが入るセルを文字列型と定義し、
2008-03-05 17:30:47.0の様にして、初期データの投入しようとすると、
下記エラーが発生する。
org.seasar.framework.exception.ParseRuntimeException: [ESSR0050]解析に失敗しました。理由はjava.text.ParseException: Unparseable date: "2008-03-05 17:30:47.0"
どうやら、patternをnullとしてフォーマットかけているようで、
最終的には、yyyy-MM-ddとしてparseしようとするのが原因のようです。
readXlsで取得するだけの場合はちゃんと取得できているだけに残念。
(これはこれで、yyyy/mm/dd hh:mm:ss.Sだと比較でこけるし)
回避法としては、セルをユーザ定義として、yyyy-mm-dd hh:mm:ss.000
と定義すること。ただ、これでも000までなので、厳密には違うんだろうなぁ・・・
そもそも、再度編集かけようとするとミリ秒データ捨てられちゃうし・・・
駄目もとのCAST('日付' AS Timestamp)もダメでした。
また、文字列でも、yyyy/mm/dd hh:mm:ssの形で定義すると、エラーは起こらないが、
日時として解釈され、時間データが切り捨てられる。
データをエクセルに張り付ける前に、すべてのセルを文字列としてから
貼り付けるなんて作業をしている場合にはとっても不便。
さらに、投入データをもとに、期待する結果を作成するしね・・・
環境
<dependency> <groupId>org.seasar.container</groupId> <artifactId>s2-framework</artifactId> <version>2.4.22</version> </dependency> <dependency> <groupId>org.seasar.container</groupId> <artifactId>s2-tiger</artifactId> <version>2.4.22</version> </dependency> <dependency> <groupId>org.seasar.teeda</groupId> <artifactId>teeda-extension</artifactId> <version>1.0.12</version> </dependency> <dependency> <groupId>org.seasar.teeda</groupId> <artifactId>teeda-ajax</artifactId> <version>1.0.12</version> </dependency> <dependency> <groupId>org.seasar.teeda</groupId> <artifactId>teeda-tiger</artifactId> <version>1.0.12</version> </dependency> <dependency> <groupId>org.seasar.teeda</groupId> <artifactId>teeda-xmlunit</artifactId> <version>0.1.0</version> </dependency> <dependency> <groupId>org.seasar.dao</groupId> <artifactId>s2-dao</artifactId> <version>1.0.47</version> </dependency> <dependency> <groupId>org.seasar.dao</groupId> <artifactId>s2-dao-tiger</artifactId> <version>1.0.47</version> </dependency> <dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> <version>1.0.67</version> </dependency>
ちなみにOracleXEでも同様。まぁドライバの線は薄いと思ってましたが・・・
見通し
TimestampType#bindValueあたりを書き換えるか、
もしくは、独自コンバータみたいな感じでとうろくできればいけそうなんですが・・・・
でも、こんなレベルの話は、すでに出てきると思うのでもう少し調査か??
関係ないけど
エクセルのユーザ定義型での、月と、分はともに「m」だけどどういうルールで判断してるんだろ??