- - PR -
DBでMAX関数を使ってSELECTした場合
| 投稿者 | 投稿内容 | ||||
|---|---|---|---|---|---|
|
投稿日時: 2003-04-15 16:21
こんにちは。またまた続けて投稿させていただきます。
SQLを下記のように書いた場合、 rs = stmt.executeQuery("SELECT MAX(Doc_No) FROM Doc_TB"); rs.next(); で取得したDoc_NoをGETするにはどうすればいいですか? Get_No= rs.getInt("Doc_No"); では、Get_No の値は 0 でした。 Java初めて日が浅いものですから、こんなことも出来ません。 よろしくお願いします。 [ メッセージ編集済み 編集者: nabeママ 編集日時 2003-04-16 17:20 ] | ||||
|
投稿日時: 2003-04-15 16:31
javaではなくDBの話だと思いますが,私ならこうします。
rs = stmt.executeQuery("SELECT MAX(Doc_No) as maxno FROM Doc_TB"); rs.next(); Get_No= rs.getInt("maxno"); で行けるのでは? | ||||
|
投稿日時: 2003-04-15 19:27
グループ関数を使うのであれば、別名をつけたほうがよろしいです。
| ||||
|
投稿日時: 2003-04-16 04:06
私の場合はもっぱらこれです。
rs.getInt(1); 後でわからなくならないように定数にしておくパターンが多いです。 final int MAXNO = 1; rs.getInt(MAXNO); こういうのって他の人がどうやってるか妙に気になる (^^; | ||||
|
投稿日時: 2003-04-16 09:12
おはようございます。
七味唐辛子さん、raystarさん、tabbyさんレスありがとうございます。 なるほど!!と思う自分ですが、勉強不足で恥ずかしい限りです。 MAX関数によって最大値は取得できました。 本当にありがとうございました。 人によっていろいろなやり方があるのですね。参考になります。 またよろしくお願いします。 [ メッセージ編集済み 編集者: nabeママ 編集日時 2003-04-16 17:24 ] | ||||
|
投稿日時: 2003-04-17 02:03
このコーディングはハマる可能性があるような気がします。たとえば、 select * from hoge という SQL 文でクエリをおこない、 getInt(fieldNo) で値を取得しているケースで、 テーブル定義が変更になったとたん、あちこちで予期しない値を取得してしまう、 とか、 select A, B, C from hoge という SQL 文でクエリをおこない、 getINT(A) で値を取得しているケースで、 フィールド名の変更にあわせて定数の名称だけ修正してしまい、 SQL 文がエラーになる、 とか。 素直にフィールド名で getInt("A") としたほうがよいような...。 そういう苦労したことありませんか? | ||||
|
投稿日時: 2003-04-18 01:58
私なら次のように書きます。
final String ALIAS_MAX_DOC_NO = "maxno"; String sql = "SELECT MAX(Doc_No) as " + ALIAS_MAX_DOC_NO + " FROM Doc_TB"; rs.next(); int maxDocNo = rs.getInt(ALIAS_MAX_DOC_NO); | ||||
|
投稿日時: 2003-04-18 11:03
> select * from hoge という SQL 文でクエリをおこない、
これは設計がまずいと思いますよ・・・ 改修時におっしゃられる苦労を背負い込むだけでなく、 実行時にRDBMS側で毎度無駄な処理を走らせていることになります。 > 素直にフィールド名で getInt("A") としたほうがよいような...。 > そういう苦労したことありませんか? 苦労はしますけど、コーディング側だけで逃げれる話でもないと 思いますよ。 現状のテーブル定義や取得フィールドが変わるというのはかなりの インパクトのはずなので、それなりの注意がいりますし。 パフォーマンスを考えたらgetInt(1)のほうが速いでしょうから、 これをstatic final intで定義した変数で読み替えるというのは よくある手かなと思います。 ただ、レスポンスタイムにシビアな条件がつかないのなら私は あんまり凝ったことはせずにgetInt("A")のようにしちゃいそうですが。 | ||||
