Oracle
 sql >> Database >  >> RDS >> Oracle

Come si scrivono gli array su un db Oracle 10g XE utilizzando iBatis?

Ho fatto con Mybatis3, dovrebbe essere simile nella vecchia roba di iBatis. Per ottenere il materiale JDBC, leggi questo thread . È un thread enorme, ma c'è. Cerca "ArrayDescriptor".

Fondamentalmente, devi scrivere un TypeHandler. In TypeHandler, chiama setArray. Dovrebbe essere qualcosa del genere in mybatis 3.x. Stai lavorando con un elenco, converti semplicemente con il metodo toArray. Questo è un esempio, in cui il parametro è un 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);
}

e forse qualcosa del genere 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);
}

Fai in modo che tu abbia creato un tipo, come dice in quel thread.

cioè

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

Quindi nella mappa SQL, assicurati di fare riferimento al gestore del tipo.