【问题标题】:iBatis procedure calliBatis 过程调用
【发布时间】: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,我只关心是否有结果。

标签: java procedure ibatis


【解决方案1】:

这就是我的意思。这是你已经尝试过的吗?

<typeAlias alias=”myTypeAlias” type=”path.to.MyClass” />

<resultMap id="myResultMap" class="myTypeAlias" >
    <result property="name" column="NAME"/>
    <result property="surname" column="SURNAME"/>
</resultMap>    

<parameterMap id="getInfoCall" class="map">
    <parameter property="idNumber" jdbcType="NUMERIC" mode="IN"/>
    <parameter property="result" resultMap="myResultMap" jdbcType="CURSOR" javaType="java.sql.ResultSet" mode="OUT"/>
</parameterMap>

<procedure id="getInfo" resultClass="MyClass" parameterMap="getInfoCall">
     { call GET_MY_INFO(#idNumber#,#result#) } 
</procedure>

【讨论】:

  • 是的,这就是我尝试过的 org.xml.sax.SAXParseException;行号:2124;列号:101;必须为元素类型“resultMap”声明属性“type”。行号:2124; columnNumber:101 点行:
  • @turranor 删除type,因为你是说用class="map" 将所有内容放在地图中
  • 不,实际上我使用了班级的全名
  • @turranor 见我上面的评论。您可以这样做或离开 type 并删除 class
  • 是的,成功了!但现在它给出了 java.sql.SQLException: Invalid column index error
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多