0

このコードに問題があります:

ResultSet dane = statement.executeQuery("SELECT * FROM ProWarns WHERE blahblah = '" + cel + "'");

while (dane.next()) {
    // some code (only get some string from result)
    if (TimeEnd <= EndTime) {
        statement.executeUpdate(
            "DELETE FROM ProWarns WHERE id = '" + id + "'"); //and error

        statement.executeUpdate(
            "UPDATE ProWarnsPlayers SET num = '" + NewV + "'" WHERE Pl = '"+ tar + "'");
    }
}

エラー: java.sql.SQLException: ResultSet が閉じられた後、操作は許可されません。バグはどこにあり、どうすれば修正できますか?

PS:

役に立つ場合に備えて、DB クラスのPastebinを含めています。

4

1 に答える 1

1

オブジェクトはその結果セットをキャッシュするStatementため、for ループで追加の操作を実行すると、元の結果セットが「リセット」されます。を呼び出すと、エラーが発生しますdane.nextJavadocから:

デフォルトでは、Statement オブジェクトごとに 1 つの ResultSet オブジェクトのみを同時に開くことができます。したがって、ある ResultSet オブジェクトの読み取りが別の ResultSet オブジェクトの読み取りとインターリーブされている場合、それぞれが異なる Statement オブジェクトによって生成されている必要があります。Statement インターフェースのすべての実行メソッドは、開いているステートメントの現在の ResultSet オブジェクトが存在する場合、そのオブジェクトを暗黙的に閉じます。

オプション?別のStatementオブジェクトを使用して内部クエリを実行します。

于 2013-04-13T01:59:14.030 に答える