ibatis 配置調用存儲過程,jdbctype配置

 

數據庫存儲過程如下:

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章