1. 程式人生 > >ibatis呼叫儲存過程:返回NUMBER,對應java型別的解決辦法

ibatis呼叫儲存過程:返回NUMBER,對應java型別的解決辦法

我想有很多朋友會像我一樣遇到這樣的問題

首先,我們建立一個儲存過程

create or replace procedure pro_app_test(
       p_userid in number,
       p_pid out number,
       p_paysn out varchar2
) as
BEGIN
   p_pid:=123456;
   p_paysn := '12323213'; 
END pro_app_test;

對於我們在儲存過程中,返回的是number時,我們在ibatis呼叫中,應該怎麼對應呢..

下面是ibatis中的程式碼

<parameterMap class="java.util.Map" id="pro_app_testMap">
   <parameter property="p_userid" jdbcType="NUMBER" javaType="java.lang.Long" mode="IN" />
   <parameter property="p_pid" jdbcType="NUMBER

" javaType="java.lang.Integer" mode="OUT" />
   <parameter property="p_paysn" jdbcType="VARCHAR" javaType="java.lang.String" mode="OUT" />
  </parameterMap>
  <procedure id="pro_app_test" parameterMap="pro_app_testMap">
   {call pro_app_test(?,?,?)}
  </procedure>

一般我們都會這樣把p_pid對應起來. 這樣肯定會提示錯誤:無效的列型別: -99999999

我們有兩種解決的辦法:

一: 從ibatis配置檔案中修改:把NUBER修改成INTEGER,這樣就可以了

    <parameter property="p_pid" jdbcType="INTEGER" javaType="java.lang.Integer" mode="OUT" />

二:儲存過程返回型別修改: 把p_pid用做VARCHAR2

create or replace procedure pro_app_test(
       p_userid in number,
       p_pid out varchar2,
       p_paysn out varchar2
) as
BEGIN
   p_pid:=123456;
   p_paysn := '12323213'; 
END pro_app_test;

然後ibatis修改成這樣:

<parameter property="p_pid" jdbcType="VARCHAR" javaType="java.lang.String" mode="OUT" />

總結一點: 對於返回number的欄位,我們在ibatis裡面用jdbcType="INTEGER" 來對應.