0

ループ内にコードを追加すると、ループが停止するので混乱します(事実上、最初のラウンドの後で終了します)。

正常に機能しているコード

StringBuilder sb = new StringBuilder(4096);
  while ((rs.next())) {
  System.err.println(rs.getRow());
  sb.append(rs.getString(1)).append(",");
  }
writeToCell(sheet,"P",row.getRowNum()+1,sb.toString());

ループしないコード

StringBuilder sb = new StringBuilder(4096);
    while ((rs.next())) {
    System.err.println(rs.getRow());
    String p=rs.getString(1);
    ArrayList<Parent> pscore = new ArrayList();
    pscore.add(new Parent(p));
    String Score= getSegment(pscore);
    sb.append(p).append("(").append(Score).append("),");
    }
writeToCell(sheet,"P",row.getRowNum()+1,sb.toString());

なぜそれが一番下のバージョンではなく一番上のバージョンでループするのか理解できません。エラーはスローされません

4

2 に答える 2

1

私の推測では

pscore.add(new Parent(p));
String Score= getSegment(pscore);

rsgetSegmentが戻る前に終了したデータベースクエリを置き換えるデータベースクエリを実行するため、次の呼び出しrs.next()はfalseになります。

これを避けるために、それrsがフィールドではなくローカル変数であることを確認します。

この場合、最善の解決策は、元のSELECTをテーブル間の結合にして、行ごとにクエリを実行するのではなく、必要なすべての情報を取得することです。

于 2012-10-18T11:05:14.703 に答える
0

Keppilsのコメントは私を答えに引き寄せました

「getSegment()メソッドのrsに何かが起こったのではないでしょうか?」

コメントに賛成したクレジットを与える方法がわかりませんが、コメントを正しいものとして受け入れることはできません

親クラスはデータベース接続に静的変数を使用するため、定義されたときにrs変数をオーバーライドします。

于 2012-10-18T11:00:22.373 に答える