2012-04-12 88 views
1

我试图比较来自三个Resultset的值,但似乎有例外,我尝试运行它。 有人可以帮我解决哪里出错。我会感谢任何帮助。下面的代码片段,它的投掷的错误:SQLException:此ResultSet已关闭

java.sql.Connection connDB = null; 

    java.lang.Object[] reconciledPaymentDetails = null; 

    java.util.Vector shiftsVector = new java.util.Vector(1, 1); 

    String status = ""; 

    try { 

     Class.forName("org.postgresql.Driver"); 
     } 
    catch (ClassNotFoundException ex) { 
     Logger.getLogger(DBConnection.class.getName()).log(Level.SEVERE, null, ex); 
     } 
    try { 
     connDB = DriverManager.getConnection("jdbc:postgresql://" + hostName + ":" + portNumber 
     + "/" + dbName, userName, password); 

     System.out.println("Connection established : [" + connDB.toString() + "]"); 

     java.sql.Statement pstmt = connDB.createStatement(); 

     java.sql.Statement pstmtShifts = connDB.createStatement(); 

     java.sql.ResultSet rset = pstmt.executeQuery("SELECT DISTINCT payment_mode, 
     transaction_type, credit FROM ac_cash_collection WHERE shift_no = '" + shiftNumber + 
     "'"); 

    while (rset.next()) { 
     java.sql.ResultSet rsetShifts = pstmtShifts.executeQuery("SELECT DISTINCT amount, 
     shift_amount FROM ac_shift_collections WHERE shift_no = '" + shiftNumber + "' AND 
     pay_mode ilike '"+rset.getString(1) +"'"); 

      while (rsetShifts.next()) { 

      java.sql.ResultSet rset2 = pstmt.executeQuery("select debit from ac_cash_book where 
      shift_no='"+shiftNumber+"'"); 

       while (rset2.next()){ 
        double debit =rset2.getDouble("debit"); 

        if((rset2.getDouble("debit")<=0)) 

         status = "no_banked"; 

        else if((rset2.getDouble("debit")==rsetShifts.getDouble("amount")) && 
         (rsetShifts.getDouble("amount"))< rsetShifts.getDouble("shift_amount")) 

         status= "BntClosed"; 

        else if (rset2.getDouble(1)==rsetShifts.getDouble("shift_amount")) 

         Status ="bClosed"; 

       shiftsVector.addElement(rset.getString(1)+":"+rsetShifts.getString(1)+":"+status); 
    } 
    } 
    } 

回答

3
java.sql.ResultSet rset = pstmt.executeQuery("SELECT DISTINCT payment_mode, transaction_type, credit FROM ac_cash_collection WHERE shift_no = '" + shiftNumber + "'"); 
java.sql.ResultSet rset2 = pstmt.executeQuery("select debit from ac_cash_book where shift_no='"+shiftNumber+"'"); 

你的第二个呼叫释放由第一个产生的资源,这就是为什么ResultSet中被关闭。