- - PR -
Oracleから取得したデータがJSPで全件表示できない
1
| 投稿者 | 投稿内容 |
|---|---|
|
投稿日時: 2003-03-10 11:32
Oracle9.2.0から
select * from (テーブル名) でデータを取得してJSPで表示させようとしたところ、 件数は300件超あるのですが、 280件目程でJSPファイルのデータの出力が切れてしまいます。 次に280件を超えないよう条件式をいれ、 select * from (テーブル名) where (条件式) でデータを取得してJSPで表示させようとしたところ、 JSPファイルのデータは最後まで完全に出力されました。 JSPの出力バイト数には制限があるのでしょうか? 同じ現象を解決された方、 もしくは解決方法をご存知の方がいらっしゃいましたら、 レスお願い致します。 |
|
投稿日時: 2003-03-11 10:59
> JSPの出力バイト数には制限があるのでしょうか?
特にありません。HTTPで転送できるサイズであれば問題無いはずです。 > もしくは解決方法をご存知の方がいらっしゃいましたら、 データの出力が切れたとき、エラーログには何が出力されてますか? |
|
投稿日時: 2003-03-11 12:12
こんにちわ。
JSPの出力バイト数うんぬんの前に JDBC操作等のデータアクセスロジック部分 で切られてるのかどうか検証しましたか? |
|
投稿日時: 2003-03-12 13:25
返信ありがとうございます。
>HTTPで転送できるサイズであれば問題無いはずです。 画面に表示されるソースはテキストのみで、サイズ内で間違いないと思います。 >データの出力が切れたとき、エラーログには何が出力されてますか? TOMCATのログで、「maximum open cursors exceeded」の例外エラーになっています。 カラムのメタ情報のResultSetオブジェクトを、 while(rs.next()){... のようにループさせ、 さらにレコードの件数分のResultSetオブジェクトでループさせています。 (画面にはテーブルのカラム名とデータ内容を表示させようとしています。) ループでのカーソル移動回数にMAXが設定してあり、 TOMCATで回数設定を変更することは可能?ということなのでしょうか。 もしくは、次のレコードに移動するたび「.getColumns」でカラム名を取得して ループさせる文法自体に問題があるのでしょうか。(これ以外の方法が思いつかなくて、他のコード方法は試していません。) よろしくお願いします。 |
|
投稿日時: 2003-03-12 14:45
こんにちは。
それってオラクル側の問題では? http://members12.cool.ne.jp/~yoshi0915/oracle/000831/20301.html オラクルやJDBC辺りを確認してはいかがですか? オラクルの働き(役割)と、アプリケーションサーバ(WEBサーバ)の働き(役割)など を、それぞれご理解されていますか? 問題が起きた場合に、問題点や現象を切り分けて考えられるように、それぞれの技術をしっ かり理解された方がいいですよ。 [ メッセージ編集済み 編集者: maru 編集日時 2003-03-12 14:52 ] |
|
投稿日時: 2003-03-12 14:53
http://java-house.jp/ml/archive/j-h-b/032581.html
これとは関係なしですか? #Googleで検索した一発目です。 |
|
投稿日時: 2003-03-13 23:49
こんばんわ
>TOMCATのログで、「maximum open cursors exceeded」の例外エラーになっています。 正確には、JDBCドライバーが吐くエラーですね。 SQLExceptionとログに書かれているはずなので、この時点でJSPうんぬんは 関係なくなります。 日本語に訳すと「最大オープンカーソル数を超えました」ですか。 WebSphere3.5とOracle8iの組み合わせでよくみかけました。 オラクルの最大カーソル数を増やすことで対応したきがします。 (私の場合はですよ) >ループでのカーソル移動回数にMAXが設定してあり、 >TOMCATで回数設定を変更することは可能?ということなのでしょうか。 >もしくは、次のレコードに移動するたび「.getColumns」でカラム名を取得して >ループさせる文法自体に問題があるのでしょうか。(これ以外の方法が思いつかなく >て、他のコード方法は試していません。) コードについては、実際のコードが示されない限りは問題があるともないとも いえないです。 |
|
投稿日時: 2003-03-15 21:18
DatabaseMetaData.getColumns() を使って、1レコードごとにカラムのResultSetを取得しているようですが、これだと莫大な数のカーソルをオープンすることになります。
>(画面にはテーブルのカラム名とデータ内容を表示させようとしています。) はっきり言って、無駄です。カラム名なんて全ての行で一緒なのですから、一回だけカラム名を取得すれば十分です。あとは普通に、取得したカラム名を指定してResultSetからgetInt()とかすれば良いのでは? |
1
