代码之家  ›  专栏  ›  技术社区  ›  Nipuna

SQLException:结果集关闭后不允许执行操作

  •  1
  • Nipuna  · 技术社区  · 14 年前

    我正在尝试执行getPendingSalesOrderID()方法,该方法调用方法selectInAsending(…)。

    java.sql.SQLException:结果集关闭后不允许执行操作

    在这里,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 回复  |  直到 14 年前
        1
  •  2
  •   Buhake Sindi Tesnep    14 年前

    如果 db.endSelect() 关闭结果集,为什么不删除它(在 selectInAsending()

    您可以在 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) {
    
            }
        }
    }
    
        2
  •  1
  •   Erick Robertson    14 年前

    db.endSelect() 打电话来。

    只需返回结果集,然后确保调用 rs.close()