[Seasar-user:13142] Re: [S2JDBC]SQLファイルによる操作でlike文が上手くいかない
Koichi Kobayashi
[E-MAIL ADDRESS DELETED]
2008年 3月 4日 (火) 01:00:24 JST
小林 (koichik) です.
Date: Tue, 4 Mar 2008 00:06:21 +0900
From: 出羽 健一 <[E-MAIL ADDRESS DELETED]>
To: <[E-MAIL ADDRESS DELETED]>
Subject: [Seasar-user:13141] [S2JDBC]SQLファイルによる操作でlike文が上手くいかない
> コードを実行すると次のようなSQL文が
> 生成されるものと期待していました。
>
> select * from employee
> where
> name like 'A%'
>
> しかし、実際に生成されたSQL文は以下のとおりで、
> 期待した結果と異なっていました。
>
> [getCompleteSqlメソッドによるログ]
> select * from employee
> where
> name like 'A'
>
> [getRawSqlメソッドによるログ]
> select * from employee
> where
> name like ?
それが仕様です.
SQL ファイルについては S2Dao と同等です (たぶん).
そんなわけで (どんなわけで?),S2Dao のドキュメント
http://s2dao.seasar.org/ja/s2dao.html#SQLBind
の「バインド変数コメント」より.
----------------------------------------------------------------------
LIKEを使用する場合は、次のようにします。
ename LIKE /*ename*/'hoge'
ワイルドカードを使いたい場合は、メソッドの引数の値に埋め込みます。
「"COT"を含む」という条件を指定する場合は、以下のように引数の値に
ワイルドカードを埋め込みます。
employeeDao.findEmployees("%COT%");
----------------------------------------------------------------------
> PS. this.name = "A%"; のようなコードにすると
> 期待通りのSQLが得られるのですが、ひょっとして、
> これが正しい使い方!?
あるいは SQL ファイルで
select * from employee
where
name like /*name*/'S' || '%'
のようにするかですね.
--
<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 メーリングリストの案内