Ява.язык 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()]);
}
любые подсказки о том, что я могу делать неправильно? Я видел два потока на Code Ranch по аналогичным вопросам, но ни один из них, похоже, не дал решения для моего случая.
2 ответов
вы закрываете оператор перед извлечением информации из результирующего набора. Переместить stmt.close()
звонить после rs.next()
цикл (но держите try / finally).
поскольку фиксированный код не помещается в комментарий, я публикую его здесь для дальнейшего использования.
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()]);
}