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
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.