2015-12-11 5 views
-1

Я написал следующий код, но дает Resultset исчерпал ОшибкуИзмученного Resultset SQL Исключение происходит в случае условие еще условие

String dt = rs.getTimestamp("GuaranteeDate")+""; 
        SimpleDateFormat dateFormat1 = new SimpleDateFormat("yyyy-MM-dd"); 
        Date date = dateFormat1.parse(dt); 
        DateTime dateTime = new DateTime(date); 


         Integer attributeID=0; 
         String quey1 ="select distinct M_attributesetinstance_id from M_storage where m_Product_id="+M_Product_ID; 
         attributeID = DB.getSQLValue(trxName, quey1); 

         Timestamp MaufacuringDate = null; 
         String query = "select manufacturingdate from m_attributesetinstance where m_attributesetinstance_id="+attributeID; 


         try 
         { 
          pstmt =null; 
          rs=null; 

          pstmt = DB.prepareStatement(query.toString(),null); 
          rs = pstmt.executeQuery(); 
          while (rs.next()) 
          { 
           MaufacuringDate = rs.getTimestamp("manufacturingdate"); 
          } 
         } 
         catch (Exception e) 
         { 
          e.printStackTrace(); 
         } 


        if(MaufacuringDate!= null) 
        { 
        DateTime ManufacturingDate = new DateTime(MaufacuringDate); 


        try{ 
         if((!"".equalsIgnoreCase(dt) || dt!=null) && percentage>=0 && GuaranteeDate!=null) { 
          SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); 
          Calendar c1 = Calendar.getInstance(); 
          Date d1 = c1.getTime(); 
          DateTime dateTime1 = new DateTime(d1); 

          try { 
           // c1.setTime(sdf.parse(dt)); 
           //ReadableInstant date2; 
           Days d = Days.daysBetween(ManufacturingDate, dateTime); 
           int days = d.getDays(); 


           float calulateddays = (float)(days*(percentage/100.0f)); 
           Integer roundeddays = Math.round(calulateddays); 
           c1.setTime(sdf.parse(dt)); 
           c1.add(Calendar.DATE, -roundeddays); // number of days to add 

           try{ 
            SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); 
            Date parsedDate = dateFormat.parse(sdf.format(c1.getTime())); 
            MinGuaranteeDate = new java.sql.Timestamp(parsedDate.getTime()); 
           }catch(Exception e){ 
            MinGuaranteeDate = null; 
            e.printStackTrace(); 
           } 

          } catch (ParseException e) { 
           MinGuaranteeDate = null; 
           e.printStackTrace(); 
          } 

         } 
         else { 
          continue; 
         } 


         }catch(Exception e) { 
          MinGuaranteeDate = null; 
          e.printStackTrace(); 
         } 


          System.out.println("MinGuaranteeDate :"+MinGuaranteeDate); 
          System.out.println("TodayDate :"+GuaranteeDate); 

          if(MinGuaranteeDate==null || MinGuaranteeDate.after(GuaranteeDate)) { 
           continue; 
          } 
          } 

        else{ 
         Timestamp GRNDate = null; 

          String query2 = "select distinct Movementdate from M_inout m " 
           +"inner join m_inoutline mil ON (m.M_Inout_ID = mil.M_Inout_id) where mil.M_Product_Id="+M_Product_ID; 

         try 
         { 
          pstmt =null; 
          rs=null; 

          pstmt = DB.prepareStatement(query2.toString(),null); 
          rs = pstmt.executeQuery(); 
          while (rs.next()) 
          { 
           GRNDate = rs.getTimestamp("Movementdate"); 
          } 
         } 
         catch (Exception e) 
         { 
          e.printStackTrace(); 
         } 

         // String dt1 = rs.getTimestamp("GuaranteeDate")+""; 
         SimpleDateFormat dateFormat2 = new SimpleDateFormat("yyyy-MM-dd"); 
         Date date1 = dateFormat1.parse(dt); 
         DateTime dateTime2 = new DateTime(date1); 

         DateTime GRDate = new DateTime(GRNDate); 

         try{ 
           if((!"".equalsIgnoreCase(dt) || dt!=null) && percentage>=0 && GuaranteeDate!=null) { 
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); 
            Calendar c1 = Calendar.getInstance(); 
            Date d1 = c1.getTime(); 
            //DateTime dateTime1 = new DateTime(d1); 

            try { 
             // c1.setTime(sdf.parse(dt)); 
             //ReadableInstant date2; 
             Days d = Days.daysBetween(GRDate, dateTime); 
             int days = d.getDays(); 


             float calulateddays = (float)(days*(percentage/100.0f)); 
             Integer roundeddays = Math.round(calulateddays); 
             c1.setTime(sdf.parse(dt)); 
             c1.add(Calendar.DATE, -roundeddays); // number of days to add 

             try{ 
              SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); 
              Date parsedDate = dateFormat.parse(sdf.format(c1.getTime())); 
              MinGuaranteeDate = new java.sql.Timestamp(parsedDate.getTime()); 
             }catch(Exception e){ 
              MinGuaranteeDate = null; 
              e.printStackTrace(); 
             } 

            } catch (ParseException e) { 
             MinGuaranteeDate = null; 
             e.printStackTrace(); 
            } 

           } 
           else { 
            continue; 
           } 


           }catch(Exception e) { 
            MinGuaranteeDate = null; 
            e.printStackTrace(); 
           } 


            System.out.println("MinGuaranteeDate :"+MinGuaranteeDate); 
            System.out.println("TodayDate :"+GuaranteeDate); 

            if(MinGuaranteeDate==null || MinGuaranteeDate.before(GuaranteeDate)) { 
             continue; 
            } 

         } 
         } 
if (rs.getBigDecimal(11).signum() == 0) { 
       list.add(new MStorage(ctx, rs, trxName)); 

       } 

      } 
     } 
    } catch (Exception e) { 
     s_log.log(Level.SEVERE, sql, e); 
    } finally { 
     DB.close(rs, pstmt); 
     rs = null; 
     pstmt = null; 
    } 

в коде выше выдает ошибку о постановке BigDecimal

if (rs.getBigDecimal(11).signum() == 0) { 
        list.add(new MStorage(ctx, rs, trxName)); 



       } 

на этой линии Пожалуйста, помогите мне

+0

Показать statcktrace пожалуйста. – Jens

+0

} \t \t} \t \t PreparedStatement pstmt = NULL; \t \t ResultSet rs = null; \t \t try { \t \t \t pstmt = DB.prepareStatement (sql, trxName); \t \t \t pstmt.setInt (1, M_Locator_ID> 0? M_Locator_ID: M_Warehouse_ID); \t \t \t pstmt.setInt (2, M_Product_ID); \t \t \t если (allAttributeInstances!) { \t \t \t \t pstmt.setInt (3, M_AttributeSetInstance_ID); \t \t \t} еще если (GuaranteeDate! = NULL) { \t \t \t \t pstmt.setTimestamp (3, GuaranteeDate); \t \t \t} \t \t \t Rs = pstmt.ExecuteQuery(); \t \t \t Timestamp MinGuaranteeDate = null; \t \t \t Целочисленный процент = 0; \t \t \t в то время как (rs.next()) { – Lina

+0

его в неверном формате – Lina

ответ

0

Вам нужно узнать, вызывает ли снова вызов rs.next(), когда вы уже использовали все результаты в другом Блок:

    while (rs.next()) 
      { 
       MaufacuringDate = rs.getTimestamp("manufacturingdate"); 
      } 
+0

, как я могу найти этот файл – Lina

+0

, если нет, то что я могу сделать – Lina

0

Я думаю, вы итерацию по записи с помощью Resultset объекта rs и теперь ваши Р.С. курсор находится в конце записи/или мы можем сказать это не указывает на какой-либо записи.

По-прежнему ваш код ниже использует объект rs, который исчерпал и не указал ни на одну строку записи/таблицы.

if (rs.getBigDecimal(11).signum() == 0) { list.add(new MStorage(ctx, rs, trxName)); }

Возможное решение:: Создать новое заявление, выполнить запрос и получить новый ResultSet объект, курсор будет в начале записи (Примечание: Курсор при -1 (использование .next())) и итерации по объявлению записи получают требуемый результат.

OR используйте некоторую логику внутри предыдущей итерации по записи и получите результат там сам, а не итерации снова.

Смежные вопросы