【问题标题】:How do you write arrays to an Oracle 10g XE db using iBatis?如何使用 iBatis 将数组写入 Oracle 10g XE db?
【发布时间】:2011-04-25 14:51:42
【问题描述】:

我一直在寻找这个高低的答案,但无法得到答案。

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

这是我目前的代码:

映射器.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);

}

提前感谢您的帮助!

【问题讨论】:

  • AccountGrp 列的类型是什么?
  • 在java中它是一个Account对象的arrayList。在数据库中,我不确定将其设置为什么。我想这是我的问题的一部分。目前它只是设置为 varchar。

标签: java oracle oracle10g ibatis mybatis


【解决方案1】:

Mybatis3 我已经完成了,在旧的 iBatis 东西中应该是类似的。要获取 JDBC 内容,请阅读 this thread。这是一个巨大的线程,但它就在那里。寻找“ArrayDescriptor”。

基本上,您需要编写一个 TypeHandler。在 TypeHandler 中,调用 setArray。在 mybatis 3.x 中应该是这样的。您使用列表,只需使用 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 映射中,确保引用类型处理程序。

【讨论】:

    猜你喜欢
    • 2011-03-31
    • 1970-01-01
    • 2013-09-01
    • 2015-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-07
    • 1970-01-01
    相关资源
    最近更新 更多