- - PR -
preparedStatement とNull可の数値カラム
1
| 投稿者 | 投稿内容 |
|---|---|
|
投稿日時: 2004-06-09 17:54
こんにちは。
今、preparedStatementを使ってNull可の数値カラムにNULLを入れようとして苦戦しています。 例えばsetIntメソッドだとNullは無理ですのでsetNullしかないと思うのですが それだと数値入力のところですべて条件判断をしなくなければならないので コードの保守的にあまりいい仕様とは思えません。 例えば Integer num1; Integer num2; Integer num3; Integer num4; pstmt = conn.preparedStatement("UPDATE TABLE1 SET NUM1=?, NUM2=?, NUM3=?, NUM4=?"); if (num1==null) { pstmt.setNull(1, DECIMAL); } else { pstmt.setObject(num1); } ・・・以下略 でもバインド変数を使わなければSET NUM1=NULLみたいになってうまくいくわけですよねぇ。 最近の書物ではパフォーマンスがよくなるし、SQLへの文字列の変換処理もなくなるので Bind変数を使えとよく書いてありますが、Null可の数値カラムが多いテーブルだと ソースの可読性がかなり下がると思います。 皆さんはいったいどのように対処なされていますか? |
|
投稿日時: 2004-06-09 20:12
単に setDecimal(PreparedStatement p, int num, Integer val) のようなラッパメソッドを書けば良いだけではないでしょうか。
|
|
投稿日時: 2004-06-10 10:55
Gio様、ご返答ありがとうございます。
確かにラッパーメソッドを作るのも手ですね。 実は今、SQLを処理するクラスを作っていてSQL文とパラメータとなるOBJECTを渡せば 一括して処理するようなものをテストしてたのですが 例: #strSQLがSQL文でarrayListParamsがSQLカラムに属したOBJECT dbclass.update(strSQL, arrayListParams); みたいな感じでdbclass内部で pstmt.setObject( arrayListParams.get(i) ) を回せば instanceof の条件判別をしなくてもパラメータを入れれるかなと思っていました。 最低、数値関係は必要みたいですね・・・ |
|
投稿日時: 2004-06-11 09:27
たいしたことではないのですが、JakartaCommonsのDbUtilsを使えば楽ですね。
WEB+DB Pressの今月号(7月号)に載ってました・・・ |
1
