日期:2014-05-16 浏览次数:20477 次
?
数据库存储过程如下:
  procedure p_project_details_stat
  (
    i_date_start    in 
varchar2,
    i_date_end      in varchar2,
    i_range_start   in 
number,
    i_range_end     in number,
    i_org_id        in 
number,
    i_species_id    IN VARCHAR2,
    i_query_user_id in 
number,
    o_report_id     out number
  )
配置调用如下:
 <parameterMap id="proMap" class="map">
  <parameter 
property="complainDateStart" javaType="java.lang.String" mode="IN" 
jdbcType="VARCHAR" />
  <parameter property="complainDateEnd" 
javaType="java.lang.String" mode="IN" jdbcType="VARCHAR" 
/>
  <parameter property="priceOne" javaType="java.math.BigDecimal" 
mode="IN" jdbcType="NUMBER" />
  <parameter property="priceTwo" 
javaType="java.math.BigDecimal" mode="IN" jdbcType="NUMBER" 
/>
  <parameter property="orgId" javaType="java.math.BigDecimal" 
mode="IN" jdbcType="NUMBER" />
  <parameter property="speciesIdList" 
javaType="java.lang.String" mode="IN" jdbcType="VARCHAR" 
/>
  <parameter property="userId" javaType="java.math.BigDecimal" 
mode="IN" jdbcType="NUMBER" />
  <parameter property="reportId" 
javaType="java.math.BigDecimal" mode="OUT" jdbcType="NUMBER" 
/>
 </parameterMap>
 <procedure id="generateProjectDetial" 
parameterMap="proMap">
   <![CDATA[        
     CALL 
szzc_stat.p_project_details_stat(?,?,?,?,?,?,?,?)
   
]]>
 </procedure>
?
老是报:
--- Check the CALL 
szzc_stat.p_project_details_stat(?,?,?,?,?,?,?,?).  
--- Check the output 
parameters (register output parameters failed).  
--- Cause: 
java.sql.SQLException: 无效的列类型: -99999999
?
网上查找资料:
?
后来查看java.sql.Types类中有关JDBC类型变量类型,并没有发“NUMBER”这一静态字段,而只有“NUMERIC”字段。(因此 jdbcType 的值不是数据库ORACLE的参数类型,而是其对应的JDBC变量类型)
但改了之后依然报同样错误。
后来发现在java.sql.Types类中还有一个DECIMAL静态常量,与javaType定义的java.math.BigDecimal类型一致。
再修改测试则通过,不再报错。
所以“无效的列类型”异常解决方法,根据存储过程的参数类型找出正确的jdbcType(具体参考java.sql.Types类的JDBC静态变量)。
?
?
地址:http://www.cnblogs.com/leolwang/archive/2010/03/25/1694539.html
?
?
正确配置:
<parameterMap id="proMap" class="map">
  <parameter 
property="complainDateStart" javaType="java.lang.String" mode="IN" 
jdbcType="VARCHAR" />
  <parameter property="complainDateEnd" 
javaType="java.lang.String" mode="IN" jdbcType="VARCHAR" 
/>
  <parameter property="priceOne" javaType="java.math.BigDecimal" 
mode="IN" jdbcType="DECIMAL" />
  <parameter property="priceTwo" 
javaType="java.math.BigDecimal" mode="IN" jdbcType="DECIMAL" 
/>
  <parameter property="orgId" javaType="java.math.BigDecimal" 
mode="IN" jdbcType="DECIMAL" />
  <parameter property="speciesIdList" 
javaType="java.lang.String" mode="IN" jdbcType="VARCHAR" 
/>
  <parameter property="userId" javaType="java.math.BigDecimal" 
mode="IN" jdbcType="DEC