數據庫存儲過程如下:
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 |
|