- - PR -
PostgreSQL8.1とDbUtilsについて
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2006-01-08 14:00
みなさん、こんにちは。
どんたくおです。 // 年が明けました。 今年もよろしくお願いします。 去年のお話になるのですが、PostgreSQL8.1がリリースされました。 巷では、今回のバージョンアップはパフォーマンス重視ということ で、わりと早くなったらしので、僕も導入して、かるいWEBアプリを 作ってみたのですが・・・。 PostgreSQL8.1からかは不明なのですが、データの挿入時の型指定が 厳しくなったのか、SQLExceptionがでてしまいました。 ちなみに、Jakarta Commons DbUtilsを使用しています。 hogeテーブル CREATE TABLE hoge( id integer, name varchar(100) ); というテーブルがあったとします。 そして、以下のようにしてデータを挿入します。 String sql = "INSERT INTO hoge(id, name) values (?,?)"; String[] ary = {"1", "お名前"}; try { int cnt = qr.update(sql, ary); } catch (SQLException e) { e.printStackTrace(); } すると、 column "id" is of type integer but expression is of type character varying Query というSQLExceptionが出力されます。 英語より日本語のほうが得意(英語はしゃべれません)なので、は ずしているかもしれませんが、integer型のフィールドに文字列を入れようとし ているということなのかなともいまして、以下のようにしました。 String sql = "INSERT INTO hoge(id, name) values (cast(? as int),?)"; とすると、レコードが挿入されました。 いままで、DbUtilsとWindows版のPostgreSQL8.0で動かしていたのです が、型指定しなくても問題なく挿入できました。 型指定すれば挿入できるので、よいのですが、少し煩わしいなと 思っています。 同じ問題でお悩みの方で、何かよい解決策をご存知の方がおいでまし たらご教授いただけると大変ありがたいです。 よろしくお願いします。 | ||||
|
投稿日時: 2006-01-09 01:53
Object型の配列で渡す中身を数値ならInteger なり相応しい型で
渡すようにすれば何とかなりませんか?
煩わしいかもしれませんが、私はこの方が正しい姿と思います。 | ||||
|
投稿日時: 2006-01-11 11:38
せんさん、ご返信ありがとうございます。
> Object型の配列で渡す中身を数値ならInteger なり相応しい型で渡すようにすれば何とかなりませんか? あ、そういう方法もありますね。 // すみません。全然思いつきませんでした。 > 煩わしいかもしれませんが、私はこの方が正しい姿と思います。 僕もせんさんに、言われて、「たしかに」と思いました。 // ちなみに、余談ですが、8.0.5では挿入できましたので、やはり8.1以降からみたいです。 みなさま、ありがとうございました。 |
1