[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 メーリングリストの案内