0

我的应用程序是基于 Java 的,目前针对 Oracle、SQL Server 和 PostgreSQL 数据库运行。我们最近开始使用 XML 数据类型(Oracle 上的 XMLTYPE)来存储一些 xml 片段。

因此创建表查询可能如下所示:

CREATE TABLE temp_xml_test
( xml_id integer CONSTRAINT xml_test_pk PRIMARY KEY,
xml_col xml
-- xml_col xmltype (Oracle)
);

然后我们使用 SQLXML 对象来设置值,如下所示:

    public void setSQLXML(int colIndex, String data) throws SQLException {
        SQLXML xml = getSqlXmlInstance();
        xml.setString(data);
        _statement.setSQLXML(colIndex, xml);
    }

其中 _statement 是 PreparedStatement 对象。

但是,我们还使用 p6spy DB 驱动程序来捕获插入/更新/删除 SQL 以进行审计。

唯一的问题是 p6spy 将捕获 Java 内部对象名称(或任何名称) - 以下是 Oracle 和 PostgreSQL 示例:

UPDATE TEMP_XML_TEST SET XML_COL='oracle.xdb.XMLType@11d6fc4' WHERE XML_ID=14

UPDATE TEMP_XML_TEST SET XML_COL='org.postgresql.jdbc.PgSQLXML@10040562' WHERE XML_ID=14

我们需要它与实际的 XML 数据一起出现:

UPDATE TEMP_XML_TEST SET XML_COL='<XML> ... </XML>' WHERE XML_ID=14

无论我们使用 String、Stream 还是 Reader 设置 SQLXML,此行为都是相同的。

我还需要它适用于我提到的所有 3 种数据库类型(最好使用一刀切的解决方案,但如果我必须为每个数据库提供自定义代码,我会这样做。)

有谁知道从 p6spy 输出中的 SQLXML(和 Oracle 的 XMLTYPE)获取真实字符串值的方法?

任何想法都会有所帮助。谢谢。

汤姆

4

0 回答 0