0

私のアプリケーションは Java ベースで、現在 Oracle、SQL Server、および PostgreSQL データベースに対して実行されています。最近、いくつかの xml スニペットを格納するために XML データ型 (Oracle では XMLTYPE) の使用を開始しました。

したがって、テーブル作成クエリは次のようになります。

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 オブジェクトです。

ただし、監査目的で SQL の挿入/更新/削除をキャプチャするために使用する p6spy DB ドライバーも使用します。

唯一の問題は、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 つの DB タイプすべてで機能する必要があります (万能のソリューションを使用することが望ましいですが、DB ごとにカスタム コードが必要な場合は、それを行います)。

p6spy出力でSQLXML(およびOracleのXMLTYPE)から真の文字列値を取得する方法を知っている人はいますか?

どんなアイデアでも役に立ちます。ありがとう。

トム

4

0 に答える 0