簡體   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