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

Kazuaki Miyauchi miyauchk @ gmail.com
2008年 12月 22日 (月) 17:22:30 JST


 宮内といいます。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 メーリングリストの案内