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

Abrufen von Oracle XMLType, das als binäres XML gespeichert ist, aus einer Ergebnismenge in Java

Den Haken gefunden, und er hat nichts mit dem Code zu tun.

Das richtige nullSafeGet im Hibernate UserType, wie in der referenzierten Antwort angegeben, lautet:

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

PROBLEM: Wenn Sie eine SECUREFILE BINARY XML-Spalte (nicht CLOB) verwenden, müssen Sie die neueste (11.2.0.2+) Distribution von xdb*.jar verwenden, die in diesem Fall xdb6.jar (~257 KB) ist. Das frühere xdb*.jar (~136kb für 10.x) wird immer noch funktionieren, ohne irgendwelche Ausnahmen zu werfen, selbst wenn BINARY XML falsch dekodiert wird.

TL;DR :Laden Sie xdb6.jar (~257kb) von der herunter Oracle 11gR2 (11.2.0.3) JDBC-Treiberseite . Ältere xdb-Jars fallen stillschweigend aus und werden Sie traurig machen.