- PR -

PostgreSQL8.1とDbUtilsについて

1
投稿者投稿内容
どんたくお
ベテラン
会議室デビュー日: 2005/08/29
投稿数: 88
投稿日時: 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で動かしていたのです
が、型指定しなくても問題なく挿入できました。
型指定すれば挿入できるので、よいのですが、少し煩わしいなと
思っています。

同じ問題でお悩みの方で、何かよい解決策をご存知の方がおいでまし
たらご教授いただけると大変ありがたいです。


よろしくお願いします。
せん
ぬし
会議室デビュー日: 2002/03/04
投稿数: 397
投稿日時: 2006-01-09 01:53
Object型の配列で渡す中身を数値ならInteger なり相応しい型で
渡すようにすれば何とかなりませんか?

引用:

どんたくおさんの書き込み (2006-01-08 14:00) より:
型指定すれば挿入できるので、よいのですが、少し煩わしいなと
思っています。


煩わしいかもしれませんが、私はこの方が正しい姿と思います。
どんたくお
ベテラン
会議室デビュー日: 2005/08/29
投稿数: 88
投稿日時: 2006-01-11 11:38
せんさん、ご返信ありがとうございます。

> Object型の配列で渡す中身を数値ならInteger なり相応しい型で渡すようにすれば何とかなりませんか?
あ、そういう方法もありますね。
// すみません。全然思いつきませんでした。

> 煩わしいかもしれませんが、私はこの方が正しい姿と思います。
僕もせんさんに、言われて、「たしかに」と思いました。


// ちなみに、余談ですが、8.0.5では挿入できましたので、やはり8.1以降からみたいです。


みなさま、ありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)