[pgsql-jp: 39692] Re: Apache Commons DbUtilsでの Date型パラメータの処理について

kubo dbflute @ gmail.com
2008年 12月 22日 (月) 18:13:13 JST


久保(jflute)と申します。

>> Date date2 = df.parse(date); と、Date型にした date2を入れてやっても、
ここで言っているDate型ってjava.util.Dateのことですよね?
(エラーメッセージ見るとjava.util.Dateとあるので)
もし試してなければjava.sql.Dateを試してみて下さい。

2008/12/22 Kazuaki Miyauchi <miyauchk @ gmail.com>:
>  宮内といいます。Postgres側ではなく、Apache CommonsのMLに流すべき内容なのですが
> 失礼させて頂きます。
>
>  Postgres8.3になって、SQL文の入力パラメータの型の指定が五月蝿くなったようで、
> Postgresをアップデートした途端に、Commons DbUtilsでの処理である
> qr.query("select 金額 from 返還データ where id = ?", id, h); といった文は
> idが int型であれば、int型にしてやらないとエラーになるようになりました。
> 従来は、idが String型でも処理をしてくれました。
> Stringから intに直せば済む場合はこれでいいのですが、パラメータが Date型の場合
> つまり、qr.query("select 金額 from 返還データ where 返還日 = ?", date, lh);
> といった文は、dateが String型だと、operator does not exist: date = character
> varying Query: SQL文 と int型同様に弾かれますので、dateを Date型にしてやれば
> いいのかと思い、
>   DateFormat df = DateFormat.getDateInstance();
>   Date date2 = df.parse(date); と、Date型にした date2を入れてやっても、
> java.sql.SQLException: Can't infer the SQL type to use for an instance of
> java.util.Date. Use setObject() with an explict Types value to specify the
> type to use. Query: SQL文 と弾かれてしまいます。
> String sql = "select 金額 from 返還データ where 返還日 = '" + date + "'";
> qr.query(sql, lh); と sql文の中にパラメータを埋め込んでこれを回避しているのですが、
> これは望まれたコーディングであるとは思えません。
> Date型のパラメータは、DbUtilsではどのように投入してやる事が望まれているのでしょうか。
> 宜しく御願い致します。
>


pgsql-jp メーリングリストの案内