- PR -

Oracleから取得したデータがJSPで全件表示できない

1
投稿者投稿内容
プリン体
会議室デビュー日: 2003/03/10
投稿数: 2
投稿日時: 2003-03-10 11:32
Oracle9.2.0から
select * from (テーブル名)
でデータを取得してJSPで表示させようとしたところ、
件数は300件超あるのですが、
280件目程でJSPファイルのデータの出力が切れてしまいます。

次に280件を超えないよう条件式をいれ、
select * from (テーブル名) where (条件式)
でデータを取得してJSPで表示させようとしたところ、
JSPファイルのデータは最後まで完全に出力されました。

JSPの出力バイト数には制限があるのでしょうか?

同じ現象を解決された方、
もしくは解決方法をご存知の方がいらっしゃいましたら、
レスお願い致します。

t-wata
大ベテラン
会議室デビュー日: 2002/07/12
投稿数: 209
お住まい・勤務地: 東京
投稿日時: 2003-03-11 10:59
> JSPの出力バイト数には制限があるのでしょうか?

特にありません。HTTPで転送できるサイズであれば問題無いはずです。

> もしくは解決方法をご存知の方がいらっしゃいましたら、

データの出力が切れたとき、エラーログには何が出力されてますか?
teto
ベテラン
会議室デビュー日: 2002/07/31
投稿数: 61
投稿日時: 2003-03-11 12:12
こんにちわ。

JSPの出力バイト数うんぬんの前に
JDBC操作等のデータアクセスロジック部分
で切られてるのかどうか検証しましたか?
プリン体
会議室デビュー日: 2003/03/10
投稿数: 2
投稿日時: 2003-03-12 13:25
返信ありがとうございます。

>HTTPで転送できるサイズであれば問題無いはずです。
画面に表示されるソースはテキストのみで、サイズ内で間違いないと思います。

>データの出力が切れたとき、エラーログには何が出力されてますか?
TOMCATのログで、「maximum open cursors exceeded」の例外エラーになっています。

カラムのメタ情報のResultSetオブジェクトを、
while(rs.next()){... のようにループさせ、
さらにレコードの件数分のResultSetオブジェクトでループさせています。
(画面にはテーブルのカラム名とデータ内容を表示させようとしています。)

ループでのカーソル移動回数にMAXが設定してあり、
TOMCATで回数設定を変更することは可能?ということなのでしょうか。
もしくは、次のレコードに移動するたび「.getColumns」でカラム名を取得して
ループさせる文法自体に問題があるのでしょうか。(これ以外の方法が思いつかなくて、他のコード方法は試していません。)


よろしくお願いします。
maru
ぬし
会議室デビュー日: 2003/01/27
投稿数: 412
投稿日時: 2003-03-12 14:45
こんにちは。

それってオラクル側の問題では?
http://members12.cool.ne.jp/~yoshi0915/oracle/000831/20301.html

オラクルやJDBC辺りを確認してはいかがですか?

オラクルの働き(役割)と、アプリケーションサーバ(WEBサーバ)の働き(役割)など
を、それぞれご理解されていますか?
問題が起きた場合に、問題点や現象を切り分けて考えられるように、それぞれの技術をしっ
かり理解された方がいいですよ。


[ メッセージ編集済み 編集者: maru 編集日時 2003-03-12 14:52 ]
puppet
会議室デビュー日: 2003/03/12
投稿数: 3
投稿日時: 2003-03-12 14:53
http://java-house.jp/ml/archive/j-h-b/032581.html

これとは関係なしですか?

#Googleで検索した一発目です。
teto
ベテラン
会議室デビュー日: 2002/07/31
投稿数: 61
投稿日時: 2003-03-13 23:49
こんばんわ

>TOMCATのログで、「maximum open cursors exceeded」の例外エラーになっています。
正確には、JDBCドライバーが吐くエラーですね。
SQLExceptionとログに書かれているはずなので、この時点でJSPうんぬんは
関係なくなります。

日本語に訳すと「最大オープンカーソル数を超えました」ですか。

WebSphere3.5とOracle8iの組み合わせでよくみかけました。
オラクルの最大カーソル数を増やすことで対応したきがします。
(私の場合はですよ)

>ループでのカーソル移動回数にMAXが設定してあり、
>TOMCATで回数設定を変更することは可能?ということなのでしょうか。
>もしくは、次のレコードに移動するたび「.getColumns」でカラム名を取得して
>ループさせる文法自体に問題があるのでしょうか。(これ以外の方法が思いつかなく
>て、他のコード方法は試していません。)

コードについては、実際のコードが示されない限りは問題があるともないとも
いえないです。


へげもん
ベテラン
会議室デビュー日: 2002/04/14
投稿数: 87
お住まい・勤務地: 埼玉県
投稿日時: 2003-03-15 21:18
DatabaseMetaData.getColumns() を使って、1レコードごとにカラムのResultSetを取得しているようですが、これだと莫大な数のカーソルをオープンすることになります。

>(画面にはテーブルのカラム名とデータ内容を表示させようとしています。)

はっきり言って、無駄です。カラム名なんて全ての行で一緒なのですから、一回だけカラム名を取得すれば十分です。あとは普通に、取得したカラム名を指定してResultSetからgetInt()とかすれば良いのでは?
1

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