web-dev-qa-db-ja.com

java.sql.sqlRecoverableException:閉じたステートメント:次へ

私のコードはスローします

Java.sql.sqlRecoverableException: Sentencia cerrada: next

これは、英語では次のようになると思います。

Java.sql.sqlRecoverableException: Closed statement: next

これは私のコードです:

public TransactionArray() throws SQLException {

  /* Obtenemos la tabla de transacciones. */
  Connection connection;
  connection = ConnectionManager.getConnection(STATISTIC_DATA_BASE);
  Statement stmt = null;
  String query =
          "select * " +
          "from " + "dCellStatistic" + ".F_Transaction";
  ResultSet rs = null;
  try {
     stmt = connection.createStatement();
     rs = stmt.executeQuery(query);
  } catch (SQLException e ) {
     e.printStackTrace();
  } finally {
     if (stmt != null) { stmt.close(); }
  }

  /* Construimos las transacciones a partir de los registros. */
  List<Transaction> transactionList = new ArrayList<Transaction>();
  while (rs.next()) { //THE PROBLEM ARISES IN THIS LINE!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
     transactionList.add(new Transaction(rs));
  }
  array = transactionList.toArray(new Transaction[transactionList.size()]);

}

私が間違っているかもしれないことの手がかりはありますか?同様の問題についてCodeRanchで2つのスレッドを見たことがありますが、いずれも私の場合の解決策を提供していないようです。

8
Josep

結果セットから情報を取得する前に、ステートメントを閉じています。 stmt.close()ループの後にrs.next()呼び出しを移動します(ただし、try/finalを保持します)。

20
Eric Galluzzo

修正されたコードはコメントに収まらないので、今後の参考のためにここに公開します。

public TransactionArray() throws SQLException {
  List<Transaction> transactionList = new ArrayList<Transaction>();

  /* Obtenemos la tabla de transacciones. */
  Connection connection;
  connection = ConnectionManager.getConnection(STATISTIC_DATA_BASE);
  Statement stmt = null;
  String query =
          "select * " +
          "from " + "dCellStatistic" + ".F_Transaction";

  /* Construimos las transacciones a partir de los registros. */
  ResultSet rs;
  try {
     stmt = connection.createStatement();
     rs = stmt.executeQuery(query);
     while (rs.next()) {
        transactionList.add(new Transaction(rs));
     }
  } catch (SQLException e ) {
     e.printStackTrace();
  } finally {
     if (stmt != null) {
        stmt.close();
     }
  }
  array = transactionList.toArray(new Transaction[transactionList.size()]);
}
4
Josep