[Seasar-user:2645] Re: 更新SQL自動生成について

上原 慶三 keizou
2005年 10月 3日 (月) 02:58:47 JST


 上原です。

J.r0ck wrote:
> J.r0ckです。
> 
> 
>>ところで、DBはOracle8iですよね。
>>
>>であれば、書かれている動作自体がおかしいなぁ。
> 
> とかいたものの、調べてみたらそうなっちゃうみたいですね。
> 済みません(汗)
> 
> 1.PreparedStatementを使用してパラメータとして指定した場合は
>   パラメータとして指定したデータは規定のデータ型となる。
> 2.JDBCではStringをパラメータとして指定した場合はVARCHAR型(または
>   LONGVARCHAR型)になりCHAR型にはならない。
>   OracleではCHAR型または文字列リテラルだけの比較では空白のパディングが
>   おこなわれるが、VARCHAR型が含まれる場合はパディングされないので
>   異なる文字列となる。
> 3.S2JDBCでは、PreparedStatementを使用し、CHAR型のカラムはSetStringで
>   バインドしている。
> 
> ということで、
> 
>>このようなプログラムがあった場合、dao#updateで自動生成されるSQLは
>>
>>update HOGE set ID='4', NAME='TEST' where ID='4'
>>
>>のような感じになります。
>>この時WHERE句は ID='4   'ではなくID='4'となっている為、一致するデータは
>>0件となります
> 
> が発生しちゃうんですね。
> 
> う〜ん、思い切ってDB側でIDの後ろスペース取れないかしら(笑)
> これから、犬の散歩なので続きは後ほど...。
> 
> ※とりあえず先ほどのレスは無かったことに(詫)
> 
> 以上
> 
 J.r0ckさん詳しい解説ありがとうございます。
Oracleはいじったことないので助かります。

で、これの解決方法ですが、
1.あらたにTYPESアノテーションを導入して、Beanにカラムの型を指定できるよ
うにし
2.BeanのIDの型をCHARに指定してもらう。
ので解決できないでしょうか。

#ところでOracleって試使用ってできないんでしたっけ。
#開発者ライセンスっていくらぐらいなんでしょう。
-- 
---
上原 慶三<[E-MAIL ADDRESS DELETED]>



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