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

Recupero di Oracle XMLType archiviato come XML binario da un set di risultati in Java

Trovato il problema e non è correlato al codice.

Il corretto nullSafeGet in Hibernate UserType, come indicato nella risposta a cui si fa riferimento è:

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: quando si utilizza una colonna SECUREFILE BINARY XML (non CLOB) è necessario utilizzare la distribuzione più recente (11.2.0.2+) di xdb*.jar, che in questo caso è xdb6.jar (~257 kb). Il precedente xdb*.jar (~136kb per 10.x) continuerà a funzionare, senza escludere eccezioni anche quando si decodifica BINARY XML in modo errato.

TL;DR :Scarica xdb6.jar (~257kb) dal Pagina dei driver JDBC per Oracle 11gR2 (11.2.0.3) . I vecchi jar xdb falliscono silenziosamente e ti renderanno triste.