gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 08:19:15 25 4
gpt4 key购买 nike

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

基本上我有一个对象正在使用 iBatis 写入我的数据库。这适用于字符串、整数等基本类型,但我的对象的属性之一是其他对象的数组。我希望能够保留这一点,然后调用“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 内容,请阅读 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 映射中,确保引用类型处理程序。

关于java - 如何使用 iBatis 将数组写入 Oracle 10g XE 数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5779584/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com