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

后端 未结 1 1171
天命终不由人
天命终不由人 2021-01-26 02:56

I have looked for the answer to this high and low but cannot get the answer.

Basically I have an object I am writing to my db using iBatis. This works fine with primitiv

相关标签:
1条回答
  • 2021-01-26 03:30

    I've done with Mybatis3, should be similar in the old iBatis stuff. To get the JDBC stuff, read this thread. It's a huge thread, but it is there. Look for "ArrayDescriptor".

    Basicually, you need to write a TypeHandler. In the TypeHandler, call setArray. Should be something like this in mybatis 3.x. Your working with a List, just convert with the toArray method. This is an example, where the parameter is a 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);
    }
    

    and maybe something like this in 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);
    }
    

    Make your you've built a type, like it says in that thread.

    i.e.

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

    Then in the SQL map, make sure to reference the type handler.

    0 讨论(0)
提交回复
热议问题