【发布时间】:2019-02-20 08:11:03
【问题描述】:
我不能用 ibatis 调用程序。我收到无效的列索引错误。这是代码,我跳过了 myService 实现。
错误:
--- ibatis/employee.xml中出现错误。
--- 执行查询过程时发生错误。
--- 检查 { call GET_MY_INFO(#idNumber#,#result#) }。
--- 检查输出参数(注册输出参数失败)。
--- 原因:java.sql.SQLException: Invalid Column Index
<parameterMap id="getInfoCall" class="map">
<parameter property="idNumber" jdbcType="NUMERIC" mode="IN"/>
<parameter property="result" jdbcType="CURSOR" javaType="java.sql.ResultSet" mode="OUT"/>
</parameterMap>
<procedure id="getInfo" resultClass="MyClass" parameterMap="getInfoCall">
{ call GET_MY_INFO(#idNumber#,#result#) }
</procedure>
MyClass.java:
public class MyClass{
private String name;
private String surname;
public String getName() {
return name;
}
public void setName(String name)
{
this.name=name;
}
public String getSurname()
{
return surname;
}
public void setSurname(String surname)
{
this.surname=surname;
}
}
HashMap<String,Object> params = new HashMap <String,Object>();
ResultSet rs = null;
params.put("idNumber", id.getValue());
params.put("result", rs);
ArrayList result;
result = (ArrayList) myService.getInfo(params);
程序:
DECLARE
ID_NUMBER NUMBER;
RESULT_P SYS_REFCURSOR;
BEGIN
ID_NO_P := ID_NUMBER;
RESULT_P := NULL;
GET_MY_INFO( ID_NUMBER, RESULT_P );
:rc0_P_CURSOR := RESULT_P;
END;
结果图版本:
<resultMap id="result" class="map" type="MyClass" >
<result property="name" column="NAME"/>
<result property="surname" column="SURNAME"/>
</resultMap>
<procedure id="getInfo" resultMap="result" parameterMap="getInfoCall">
{ call GET_MY_INFO(#idNumber#,#result#) }
</procedure>
【问题讨论】:
-
为什么是
resultClass="myClass"?我们需要查看过程签名,以及输出类 -
只是一个建议:在第一年不要从过程调用开始。只是太麻烦了。很少需要过程调用;查询/完整插入更好。
-
谢谢。我添加了程序和myclass。我没有编写此程序,也无权更改它。我必须使用它。实际上我在 mybatis 中有它的工作副本,但是在 ibatis 中它不起作用。
-
这是 Oracle PLSQL 吗?以及如何获取 ResultSet?
-
是的 Oracle PLSQL。我不考虑如何获取 rs,我只关心是否有结果。