[Seasar-user:20336] Re: S2JDBCのバインド変数について

Koichi Kobayashi [E-MAIL ADDRESS DELETED]
2010年 11月 16日 (火) 15:16:42 JST


小林 (koichik) です.

Date: Tue, 16 Nov 2010 05:40:57 +0000
From: 川口 拓也 <[E-MAIL ADDRESS DELETED]>
Subject: [Seasar-user:20335] S2JDBCのバインド変数について

> List<"ENTITY"> results = jdbcManager.from("ENTITY".class).where("COLUMN.NAME= '条件'").getResultList(); 
> 
> という様にWHERE句の条件として直接値を打ち込むときちんと検索件数を持ったリストが返ってくるのですが(9件) 
> 
> List<"ENTITY"> results = jdbcManager.from("ENTITY".class).where("COLUMN.NAME= ?","条件").getResultList(); 
> 
> バインド変数を使って検索するとなぜか検索件数が0件になってしまいます。 
> 
> コンソールに出力されるSQLは全く同じで、バインド変数を使った時のSQLをSQLコマンドラインにコピーペーストして実行してみると検索件数が9件になります。 
> バインド変数を使った時だけ、この様な減少が起きてしまうのですが原因が分かりません。何故でしょうか。 

該当のカラムが CHAR 型 (*固定長*の文字列)なのでは
ありませんか?

RDBMS によって違うかもしれませんが、Oracle などでは
リテラルでは長さが足りない場合に空白を補って比較
してくれますが、バインド変数では正しい長さの文字列を
渡さないと意図したとおりの結果にならなかったはず。

該当カラムのデータ型を確認して、CHAR 型だった場合は
正しい長さの文字列を渡すようにしてください。


-- 
<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>
    <property name="twitter">"http://twitter.com/koichik"</property>
</component>



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