当前位置: 首页 > 知识库问答 >
问题:

Jasper Reports中的强制转换异常“无法创建报告java.lang.String无法强制转换为java.lang.Integer”

弓智明
2023-03-14

我是新的jasper报告。我已经创建了一个报告与SQL服务器存储过程。当查看报告从Swing框架我得到以下异常。

 Could not create the report java.lang.String cannot be cast to java.lang.Integer

我已经用与sql Server 2000中存储过程定义相同的数据类型定义了报告的参数。

以下是本文的部分。显示存储过程调用的参数和查询的jrxml文件。

  <parameter name="CatID" class="java.lang.String"/>
<parameter name="Start" class="java.lang.Integer"/>
<parameter name="Stop" class="java.lang.Integer"/>
<parameter name="GoldID" class="java.lang.String"/>
<parameter name="Percentage" class="java.lang.Float"/>
<parameter name="Karat" class="java.lang.Integer"/>
<parameter name="DiaGrade" class="java.lang.Integer"/>
<parameter name="StoneGrade" class="java.lang.Integer"/>
<queryString>
    <![CDATA[{call PriceList($P{CatID},$P{Start}  ,$P{Stop},$P{GoldID},$P{Karat},$P{StoneGrade} ,$P{DiaGrade},$P{Percentage} ) }]]>
</queryString>
<field name="Design" class="java.lang.String"/>
<field name="DesignP" class="java.lang.String"/>
<field name="Model" class="java.lang.String"/>
<field name="GoldCode" class="java.lang.String"/>
<field name="CatID" class="java.lang.String"/>
<field name="OrnID" class="java.lang.Integer"/>
<field name="StoneID" class="java.lang.String"/>
<field name="ProfitPer" class="java.math.BigDecimal"/>
<field name="PlatingChg" class="java.lang.Integer"/>
<field name="SetCode" class="java.lang.String"/>
<field name="CompCost" class="java.math.BigDecimal"/>
<field name="USRate" class="java.math.BigDecimal"/>
<field name="CCost" class="java.math.BigDecimal"/>
<field name="Karat" class="java.lang.Integer"/>
<field name="GoldIDConv" class="java.lang.String"/>
<field name="StoneGrade" class="java.lang.Integer"/>
<field name="DiaGrade" class="java.lang.Integer"/>
<field name="CompCost1" class="java.math.BigDecimal"/>
<field name="GCost" class="java.math.BigDecimal"/>
<field name="ACost" class="java.math.BigDecimal"/>
<field name="SCost" class="java.math.BigDecimal"/>
<field name="Cost" class="java.math.BigDecimal"/>
<field name="Percentage" class="java.math.BigDecimal"/>
<field name="Price" class="java.math.BigDecimal"/>

我存储过程的一部分如下

    create PROCEDURE PriceList
@CatID      char(1),
@Start      int,
@Stop       int,
@GoldID     char(1),
@Karat      tinyInt,
@StoneGrade tinyint,
@DiaGrade   tinyInt,
@Percentage numeric(6,3)

    AS
    DECLARE @mGold varchar(4),
         @TotStones int,
     @StoneGradePrice int,
     @CurrRate numeric(9,5)


Select @mGold = ''

Select @CurrRate = Rate From Currency Where Currency = 1
           Select @TotStones = 0


Select @StoneGradePrice = 0

    IF @GoldID='W'
SELECT @mGold='W'


    IF @GoldID='N'
    SELECT @mGold='WN'


   IF @GoldID='P'
   SELECT @mGold='PT'

  IF @GoldID = 'Z' 
  Select @mGold = '(2T)'
  IF @GoldID = 'Q' 
  Select @mGold = '(2P)'
  SELECT    Design=convert(varchar(20),Design+@mGold),
  DesignP=Design,Model=dbo.GetModel(Design),GoldCode=@mGold,
    CatID,
    OrnID,
    StoneID,
    ProfitPer,
    PlatingChg,
    SetCode,
            CompCost ,
    USRate=@CurrRate,
    CCost=CUS/@CurrRate
INTO #CTemp
FROM Charges a
WHERE a.CatID=@CatID
     AND OrnID BETWEEN @Start AND @Stop



   IF @GoldID='0'or @GoldID = 'Z'  or @GoldID = 'T' or @GoldID = 'Q'   or @GoldID = 'V' 
SELECT  a.CatID,
OrnID,Small=max(isnull(b.Small,0)), Medium=max(isnull(b.Medium,0)), Large=max(isnull(b.Large,0)),Karat=@Karat,GCost=SUM(GUS),KChainConv=max(KChainConv)
INTO #GTemp
FROM GoldCost a left outer  join CatGoldPlatingChg b on a.catid = b.catid  and b.GoldID = @GoldID
WHERE a.CatID=@CatID AND mKarat=@Karat
     AND OrnID BETWEEN @Start AND @Stop 
GROUP BY a.CatID,OrnID

    SELECT  a.*,
    b.Karat,
    GoldIDConv=@GoldID,
StoneGrade,
    DiaGrade,
        CompCost1=coalesce(CompCost *((100+KChainConv)/100),0),
    GCost=coalesce(GCost,0) +( coalesce((case PlatingChg when 1 then           Small        when 2 then Medium else Large end),0)/@CurrRate) ,
                       ACost=coalesce(ACost,0),
    SCost= coalesce(SCost,0),
    Cost=coalesce(CCost,0)+ coalesce(ACost,0) + coalesce(GCost,0)+ (coalesce((case PlatingChg when 1 then Small when 2 then Medium else Large end),0)/@CurrRate) +coalesce(SCost,0) + coalesce(CompCost *((100+KChainConv)/100),0),
    Percentage=@Percentage,
    Price=(convert(numeric(10,0),ceiling((((
           coalesce(CCost,0)+ coalesce(ACost,0) + coalesce(GCost,0) + (coalesce((case PlatingChg when 1 then Small when 2 then Medium else Large end),0)/@CurrRate) +coalesce(SCost,0)) * (100+ProfitPer))/100) + coalesce((CompCost) *((100+KChainConv)/100),0) )  * (100+@Percentage)/100))
FROM #CTemp a
    LEFT JOIN tempdb.#GTemp b ON (a.CatID=b.CatID AND a.OrnID=b.OrnID )
    LEFT JOIN tempdb.#ATemp d ON (a.CatID=d.CatID AND a.OrnID=d.OrnID )
    LEFT JOIN tempdb.#STemp c ON (a.CatID=c.CatID AND a.OrnID=c.OrnID  AND a.StoneID=c.StoneID)
WHERE b.GCOST IS NOT NULL AND c.SCOST IS NOT NULL
ORDER BY a.CatID,a.OrnID

共有1个答案

法和安
2023-03-14

错误很明显:

java.lang.String cannot be cast to java.lang.Integer

您正在尝试将字符串对象强制转换为整数。这是不可能做到的。它们不是同一类型的。因此,请相应地验证输入数据和定义的字段数据类型。其中之一就是例外的原因。

 类似资料:
  • 问题内容: 我有一个包含以下定义: 值定义如下: 在活动中被调用如下: 到目前为止,一切都很好,但是当代码被实际调用时,我得到了这个错误: 这个错误对我来说没有任何意义。该列表仅包含可以转换为int的值,并且xml文件和代码中给出的默认值也仅表示一个数字。那么,为什么会出现此错误,以及如何解决呢? 问题答案: 如果您查看内部的内容,将会发现问题: 您的键“ limitSetting”返回一个不能转

  • 问题内容: 我正在运行以下查询。它显示一条错误消息。如何解决这个错误? 错误是: 问题答案: 您可以这样写: 已经是一个字符串列表,因为您只选择了一列。 此外,正如Thilo的答案所暗示的那样,您可以将结果直接转换为a 而不是使用。

  • Deal和DealDocument类是相同的。Deal document类如下所示: 你觉得问题可能是什么?它似乎是随机出现的,好像它工作正常,但在时间内系统退化 *更新*:这是我如何配置模型映射器的:ModelMapper.GetConfiguration().SetAmbiguity忽略(false).SetFieldMatchingEnabled(true).SetMatchingStrat

  • 问题内容: 我是Java的新手,正在尝试理解为什么第一个代码片段不会导致此异常,而第二个代码片段会导致此异常。由于在两种情况下都将字符串数组传递到Arrays.asList中,所以两个代码片段都不应该产生异常还是不产生异常? 第一个代码段(毫无例外): 第二段(导致上述异常): 如果相关,我正在Eclipse Helios中使用JavaSE 1.6。 问题答案: 对我来说(使用Java 1.6.0

  • 问题内容: 在我的应用程序中,我需要将arraylist转换为数组的字符串。但是,我得到一个错误: 在与我在一起的错误: 这是完整的代码: 问题答案: 尝试 注意:我建议将listofurls重命名为arrayOfURLs