java.sql.SQLException: отсутствует параметр IN или OUT в index :: 4 возникает ошибка с preparestatement - PullRequest
0 голосов
/ 09 сентября 2010
strInsertQuery="INSERT INTO SYNPACKAGEFREEUSAGEMAPPING (PACKAGEID,SERVICEID,PRIORITY,MAPPINGID,ATTRIBUTEVALUE,FREEUSAGE,UOM,PARAMSTR1,UNITCREDITPOLICYDETAILID) VALUES (?,?,?,?,?,?,?,?,?)";
newPstmt=newCon.prepareStatement(strInsertQuery);
newPstmt.setString(1,strProductId);
              newPstmt.setString(2,strUPGServiceId);
              newPstmt.setInt(3,0);
              if(FieldMappingrs.next())
              {
               newPstmt.setLong(4,FieldMappingrs.getLong(1));
              }
              newPstmt.setString(5,ucpDetailData.getCreditattributevalue());
              for(Iterator itrColUnitCreditDetail=ucpData.iterator();itrColUnitCreditDetail.hasNext();)
       {

        unitCreditData = (UnitCreditDetailData)itrColUnitCreditDetail.next();
        if(ucpDetailData.getUnitcreditpolicydetailid().equals(unitCreditData.getUnitcreditpolicydetailid()))
        {
         debugLog(PackageConstant.PACKAGE_MODULE_NAME,"ServicePackageSessionBean:createFreeUsageServiceDetails() unitCreditData "+ unitCreditData);
                newPstmt.setDouble(6,unitCreditData.getEndvalue());
               }

               debugLog(PackageConstant.PACKAGE_MODULE_NAME,"Insert record successfull"+ ucpDetailData);
              }
              newPstmt.setString(7,ucpDetailData.getUom());
              newPstmt.setString(8,ucpDetailData.getCreditattribute());
              newPstmt.setString(9,ucpDetailData.getUnitcreditpolicydetailid());

              newPstmt.executeUpdate();

Ответы [ 2 ]

5 голосов
/ 09 сентября 2010

Хорошо, посмотрите на это:

if(FieldMappingrs.next())
{
    newPstmt.setLong(4,FieldMappingrs.getLong(1));
}

Итак, вы условно устанавливаете параметр 4.

Что вы хотите вставить, если FieldMappingsrs.next() возвращает false? (Я подозреваю, что это то, что происходит.) Попробуйте установить для него подходящее значение в блоке else.

1 голос
/ 09 сентября 2010

Ваша проблема как раз в этом блоке

  if(FieldMappingrs.next()) {
      newPstmt.setLong(4,FieldMappingrs.getLong(1));
  }

Как вы видите, если .next() возвращает false, вы не передадите параметр в index 4.

Я предлагаю, если вы можете перейти к этой таблице 0 вместо нуля, используйте это

  if(FieldMappingrs.next()) {
      newPstmt.setLong(4,FieldMappingrs.getLong(1));
  } else {
      newPstmt.setLong(4,0);
  }

Или, если это обязательное значение, просто киньте exception.

...