SQLException: операция не разрешена после закрытия ResultSet - PullRequest
1 голос
/ 05 ноября 2010

Я пытаюсь выполнить метод getPendingSalesOrderIDs (), который вызывает метод selectInAsending (...).

Но это показывает SQLException, говорящее java.sql.SQLException: Операция не разрешена после закрытия ResultSet

Здесь db.endSelect () закроет все соединения.Я думаю, что проблема с этим.

public ArrayList getPendingSalesOrderIDs() {

    ArrayList a = new ArrayList();
    try {
        //ResultSet r = znAlSalesOrder.select("sono", "");
        ResultSet r = salesOrder.selectInAsending("soNo", "productionStatus = 'pending' and formatID='Zn-Al'", "soNo");
        r.beforeFirst();
        while (r.next()) {
            a.add(r.getString(1));
        }
    } catch (SQLException ex) {

    }
    return a;
}


  public ResultSet selectInAsending(String fields,String selection, String     orderField)
        {
        db = new Database();
        db.select("SELECT "+fields+" FROM "+name+" WHERE "+selection + " ORDER BY "         +orderField+ " ASC");
        this.rs=db.rs;
        db.endSelect();
        return this.rs;
        }



  public void select(String query)
  {
        if(con!=null)
        {
            try {
                System.out.println(query);
                rs = stm.executeQuery(query);
            } catch (SQLException ex) {
                Logger.getLogger(Database.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    }

Ответы [ 2 ]

2 голосов
/ 05 ноября 2010

Если db.endSelect() закрывает ваш ResultSet, почему бы не удалить его (в методе selectInAsending())?

Вы можете закрыть свой ResultSet в методе getPendingSalesOrderIDs() следующим образом:

ResultSet r = null;

try {
    ResultSet r = salesOrder.selectInAsending("soNo", "productionStatus = 'pending' and formatID='Zn-Al'", "soNo");

} catch (SQLException e) {

} finally {
    if (r != null) {
        try {
            r.close();
        } catch (SQLException e) {

        }
    }
}
1 голос
/ 05 ноября 2010

Да, проблема в вызове db.endSelect().

Просто верните набор результатов, а затем обязательно позвоните rs.close(), как только вы закончите.Это позаботится о чистке вещей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...