1

(LAN 内の) mySQL サーバーから巨大な結果セットを読み込もうとしています。メソッドを探して見つけた方法で実装しましたsetFetchSize: BalusC's Example。だから私はした:

        con = DriverManager.getConnection(url, user, password);

        //con.setAutoCommit(false);
        st = con.createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY);
        st.setFetchSize(Integer.MIN_VALUE);
        rs = st.executeQuery(query);

        int count = 0;
        while (rs.next ()) {                
            // Process entry
            String rsc = rs.getString ("resource");
            String tpc = rs.getString("topic");   
            System.out.println(count + ": " + rsc); 
            ++count;                
        }

ただし、行 1077 でハングしますrs.next()。例外をスローしません。

編集:

タイムアウトの後、何か新しいことが起こりました。次のエラー メッセージが返されました。

JDWP exit error JVMTI_ERROR_NONE(0): getting frame location [../../../src/share/back/stepControl.c:641]

このエラーは無関係のようです。

EDIT2:ストリームで結果を取得するための PHP スクリプトをコーディングしましたが、まったく同じことが起こります。だから、JDBC とは何の関係もありません...何が起こっているのかわかりません!!

4

2 に答える 2

2

2 番目のエラー メッセージは、ホットスワップおよび/または JRebel ( source ) の場合の Eclipse デバッガーのデッドロックです。

これは既知の問題で、実際には 2 つの問題があります。
1) ホットスワップ時に Eclipse デバッガーがデッドロックすることがあります (JRebel のすべてのバージョンに当てはまります)。
2) ホットスワップ時の JVM クラッシュ - JRebel 4M1 に当てはまります。

まもなくバグ修正がリリースされる予定です (3.6.2 と Eclipse プラグイン) - 最初の問題が修正されます。2 番目の問題は、4M2 リリースで修正されるはずです。

提案:

  1. Eclipse を 3.7.2 に更新し、JRebel を最新リリースに更新します。
  2. アプリケーションを再起動してください。
  3. logging/System.out.println()を使用してデバッグする
  4. mysql サーバーのログで問題 (ハードディスク、ネットワーク) を確認します。
  5. SQLワークベンチでクエリを実行します(これがクエリ/サーバーまたはコードの問題であるかどうかを確認するため)
于 2012-05-16T12:48:59.867 に答える
1

OK、問題はクエリ自体にありました。

ストリーミングは、クエリの作成方法に非常に敏感であることがわかりました。少し変更すると (SELECT DISTINCT を追加するなど)、バッファリングまたはハングアップします。最後に、クエリから列を除外して作業しました...

于 2012-05-18T10:30:27.650 に答える