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

Henter oracle XMLType gemt som binær XML fra et resultatsæt i Java

Fandt fanget, og det er ikke relateret til koden.

Den korrekte nullSafeGet i Hibernate UserType, som angivet i det refererede svar er:

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 bruger en SECUREFILE BINARY XML-kolonne (ikke CLOB), skal du bruge den seneste (11.2.0.2+) distribution af xdb*.jar, som i dette tilfælde er xdb6.jar (~257kb). Den tidligere xdb*.jar (~136kb for 10.x) vil stadig fungere uden undtagelser, selv når BINÆR XML afkodes forkert.

TL;DR :Download xdb6.jar (~257kb) fra Oracle 11gR2 (11.2.0.3) JDBC-driverside . Ældre xdb-krukker fejler lydløst og vil gøre dig trist.




  1. Skift tabelkolonnenavne til store bogstaver i postgres

  2. Bestil efter dato (varchar)?

  3. Datakilde afvist etablering af forbindelse, besked fra server:For mange forbindelser

  4. Bedste match ved hjælp af MySQL og PHP