繁体   English   中英

如何使用iBatis将数组写入Oracle 10g XE数据库?

[英]How do you write arrays to an Oracle 10g XE db using iBatis?

我已经找到了这个高低的答案,但无法得到答案。

基本上我有一个使用iBatis写入数据库的对象。 这适用于原始类型,如字符串,int等,但我的对象的一个​​属性是其他对象的数组。 我希望能够坚持这个,然后调用'selectById'语句并检索包括数组在内的完整对象。

这是我到目前为止的代码:

Mapper.xml

  <insert id="insertTrade" parameterClass="TradeObject">
insert into TESTTABLE (
  ORDERID,
  MAXPX,
  COMMISSION,
  ACCOUNTGRP )
values (
  #orderID#, #maxPx#, #commission#, #accountGrp#
)

accountGrp是我的数组,但它当前抛出错误。 没有这个字段,该声明工作正常。

java就像这样:

  public static void insertTrade (Trade obj) throws SQLException {
  logger.debug("inserting trade. Order Id: " + obj.toString());
sqlMapper.insert("insertTrade", obj);

}

在此先感谢您的帮助!!

我已经完成了Mybatis3,应该与旧的iBatis相似。 要获取JDBC内容,请阅读此主题 这是一个巨大的线索,但它就在那里。 寻找“ArrayDescriptor”。

基本上,您需要编写TypeHandler。 在TypeHandler中,调用setArray。 在mybatis 3.x中应该是这样的。 您使用List,只需使用toArray方法进行转换。 这是一个示例,其中参数是String []。

import oracle.sql.ARRAY;
import oracle.sql.ArrayDescriptor;   
.....
public void setParameter(PreparedStatement ps, int i, Object parameter, JdbcType jdbcType) throws SQLException
{
 //null check?

   ArrayDescriptor desc = ArrayDescriptor.createDescriptor("STRARRAY ", ps.getConnection());
   ARRAY oracleArray = new ARRAY(desc, ps.getConnection(), parameter);
   ps.setArray(i, oracleArray);
}

在ibatis中也许是这样的,

public void setParameter(ParameterSetter setter, Object parameter) throws SQLException
{
    ArrayDescriptor desc = ArrayDescriptor.createDescriptor("STRARRAY", setter.getPreparedStatement().getConnection());
    ARRAY oracleArray = new ARRAY(desc, setter.getPreparedStatement().getConnection(), parameter);
    setter.setArray(oracleArray);
}

让你自己构建一个类型,就像在那个帖子中所说的那样。

CREATE OR REPLACE TYPE STRARRAY AS TABLE OF VARCHAR2 (255)

然后在SQL映射中,确保引用类型处理程序。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM