sql >> Databasteknik >  >> RDS >> Oracle

Hämtar oracle XMLType lagrad som binär XML från en resultatuppsättning i Java

Hittade haken, och den är inte relaterad till koden.

Rätt nullSafeGet i Hibernate UserType, som anges i det refererade svaret är:

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: när du använder en SECUREFILE BINARY XML-kolumn (inte CLOB) måste du använda den senaste (11.2.0.2+) distributionen av xdb*.jar, som i det här fallet är xdb6.jar (~257kb). Den tidigare xdb*.jar (~136kb för 10.x) kommer fortfarande att fungera, utan att göra några undantag även vid felaktig avkodning av BINÄR XML.

TL;DR :Ladda ner xdb6.jar (~257kb) från Oracle 11gR2 (11.2.0.3) JDBC-drivrutinssida . Äldre xdb-burkar misslyckas tyst och gör dig ledsen.




  1. Optimal MySQL-konfiguration (my.cnf)

  2. hur man returnerar temp tabell från postgres funktion?

  3. Konvertera MySQL till XML via PHP

  4. Korrekt användning av php mysqli autocommit och rollback