数据库存储过程如下:
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="DECIMAL" />
<parameter property="reportId" javaType="java.math.BigDecimal" mode="OUT" jdbcType="DECIMAL" />
</parameterMap>
<procedure id="generateProjectDetial" parameterMap="proMap">
<![CDATA[
CALL szzc_stat.p_project_details_stat(?,?,?,?,?,?,?,?)
]]>
</procedure>
jdbcType类型:
数据库类型与JDBC TYPE 和Java类型对应关系
SQL Datatypes | JDBC Typecodes | Standard Java Types | Java取值范围 |
NUMBER | java.sql.Types.NUMERIC | java.math.BigDecimal | 无限制 |
NUMBER | java.sql.Types.DECIMAL | java.math.BigDecimal | 无限制 |
NUMBER | java.sql.Types.BIT | boolean | true,false |
NUMBER | java.sql.Types.TINYINT | byte | from –128 to 127 |
NUMBER | java.sql.Types.SMALLINT | short | from –32768 to 32767 |
NUMBER | java.sql.Types.INTEGER | int | From –2147483648 to 2147483647 |
NUMBER | java.sql.Types.BIGINT | long | From –9223372036854775808 to 9223372036854775807 |
NUMBER | java.sql.Types.REAL | float | From 1.4E-45 To 3.4028235E38 |
NUMBER | java.sql.Types.FLOAT | double | From 4.9E-324 to 1.7976931348623157E308 |
NUMBER | java.sql.Types.DOUBLE | double |
|