Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Wie schreiben Sie Arrays mit iBatis in eine Oracle 10g XE-Datenbank?

Habe ich mit Mybatis3 gemacht, sollte bei den alten iBatis Sachen ähnlich sein. Um das JDBC-Material zu erhalten, lesen Sie dieser Thread . Es ist ein riesiger Thread, aber er ist da. Suchen Sie nach "ArrayDescriptor".

Grundsätzlich müssen Sie einen TypeHandler schreiben. Rufen Sie im TypeHandler setArray auf. Sollte in mybatis 3.x so ähnlich sein. Wenn Sie mit einer Liste arbeiten, konvertieren Sie sie einfach mit der toArray-Methode. Dies ist ein Beispiel, bei dem der Parameter ein String[] ist.

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);
}

und vielleicht so etwas 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);
}

Machen Sie Ihren Sie haben einen Typ gebaut, wie es in diesem Thread steht.

d.h.

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

Stellen Sie dann in der SQL-Zuordnung sicher, dass Sie auf den Typhandler verweisen.