sql >> Base de Datos >  >> RDS >> Oracle

Recuperación de Oracle XMLType almacenado como XML binario de un conjunto de resultados en Java

Encontré la trampa y no está relacionada con el código.

El nullSafeGet adecuado en Hibernate UserType, como se indica en la respuesta a la que se hace referencia, es:

public void nullSafeSet(PreparedStatement st, Object value, int index, SessionImplementor session) throws HibernateException, SQLException {

    if (logger.isTraceEnabled()) {
        logger.trace("  nullSafeSet: " + value + ", ps: " + st + ", index: " + index);
    }
    try {
        XMLType xmlType = null;
        if (value != null) {
            xmlType = XMLType.createXML(getOracleConnection(st.getConnection()), (String)value);
        }
        st.setObject(index, xmlType);
    } catch (Exception e) {
        throw new SQLException("Could not convert String to XML for storage: " + (String)value);
    }
}

PROBLEMA: al usar una columna XML BINARIA DE SECUREFILE (no CLOB), debe usar la distribución más reciente (11.2.0.2+) de xdb*.jar, que en este caso es xdb6.jar (~257kb). El xdb*.jar anterior (~136kb para 10.x) seguirá funcionando, sin lanzar ninguna excepción, incluso cuando se decodifica incorrectamente XML BINARIO.

TL;RD :Descargue xdb6.jar (~257kb) desde el Página de controladores JDBC de Oracle 11gR2 (11.2.0.3) . Los frascos xdb más antiguos fallan silenciosamente y te entristecerán.