[Seasar-user:17810] Re: [S2JDBC] where句の生成で、Parameter.timestamp は 文字列による生成専用(SimpleWhere では使えない)でしょうか?

Koichi Kobayashi [E-MAIL ADDRESS DELETED]
2009年 6月 21日 (日) 04:30:00 JST


小林 (koichik) です.

Date:    Sun, 21 Jun 2009 03:27:41 +0900
From:    "O.K.U." <[E-MAIL ADDRESS DELETED]>
To:      <[E-MAIL ADDRESS DELETED]>
Subject: [Seasar-user:17809] [S2JDBC] where句の生成で、Parameter.timestamp は 文字列による生成専用(SimpleWhere では使えない)でしょうか?

> 今回は S2JDBC に関する質問です。
> where句の自動生成で、java.util.Calendar 型のデータを扱う場合に
> org.seasar.extension.jdbc.parameter.Parameter.timestamp(Calendar)で
> ラップすると、SQL文字列による指定ではうまく動作しますが、
> SimpleWhereによる指定 では ParseRuntimeException が発生します。
> date(), time() も同様です。これら
> org.seasar.extension.jdbc.parameter.Parameter.
> パッケージは文字列によるSQL生成専用のクラスなのでしょうか?

timestamp() 等は,selectBySqlFile() などで
パラメータの型を示す必要がある場合に使うものです.

select() の場合,where(String, Object...) は
任意の SQL フラグメントを指定できるので,
java.util.Date/Calendar をパラメータとする場合は
型を明示するために timestamp() 等を指定する必要が
ありますが,SimpleWhere を使う場合はエンティティの
定義から型を求めるので timestamp() 等の指定は不要です.

> SimpleWhereでは、DB の timestamp 型との比較は
> 単純に Calendar をそのまま,あるいは java.sql.Timestamp 型で
> 渡せばよいのでしょうか?

はい.

指定しなくてもいい,というより指定すると例外に
なるのはちょっといただけないので修正したいと思います.
とりあえず SimpleWhere では timestamp() 等の指定は
外してください.

なお,どんな場合でも java.sql.Date/Time/Timestamp を
パラメータとする場合は date()/time()/timestame() は
不要です.これらはその型と SQL 型との対応が一意に
決まるためです.
指定が必要なのは,java.util.Date/Calendar を
パラメータとする場合です.これらの場合は SQL の
DATE/TIME/TIMESTAMP のどの型を意図しているのか
示す必要があります.


-- 
<component name="koichik">
    <property name="fullName">"Koichi Kobayashi"</property>
    <property name="email">"[E-MAIL ADDRESS DELETED]"</property>
    <property name="blog">"http://d.hatena.ne.jp/koichik"</property>
</component>



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