Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Recuperando oracle XMLType armazenado como XML binário de um conjunto de resultados em Java


Encontrou o problema e não está relacionado ao código.

O nullSafeGet adequado no UserType do Hibernate, conforme observado na resposta referenciada, é:
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: ao usar uma coluna XML SECUREFILE BINARY (não CLOB), você deve usar a distribuição mais recente (11.2.0.2+) do xdb*.jar, que neste caso é xdb6.jar (~257kb). O xdb*.jar anterior (~136kb para 10.x) ainda funcionará, sem lançar nenhuma exceção, mesmo quando decodificando XML BINARY incorretamente.

TL;DR :Baixe xdb6.jar (~257kb) do Página de drivers JDBC do Oracle 11gR2 (11.2.0.3) . Jars xdb mais antigos falham silenciosamente e o deixarão triste.