有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

JAVAsql。SQLException:索引处缺少IN或OUT参数::4 preparestatement发生错误

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) 个答案

  1. # 1 楼答案

    你的问题就在这个街区

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

    如您所见,如果.next()返回false,您将不会在index4传递参数

    我建议,如果你能传递到表0而不是空,那么使用这个

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

    或者,如果它是必需的值,只需抛出一个exception

  2. # 2 楼答案

    看看这个:

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

    所以你要有条件地设置参数4

    如果FieldMappingsrs.next()返回false,您想插入什么?(我怀疑这就是正在发生的事情。)尝试在else块中将其设置为适当的值