2017-05-03 40 views
0

我如何通过XML文档从Java到CallableStatement传递XML到Oracle程序的Java(ojdbc)

代码,我准备XML文档:

DocumentBuilderFactory dbFactory = 
DocumentBuilderFactory.newInstance(); 
DocumentBuilder dBuilder = 
dbFactory.newDocumentBuilder(); 
Document doc = dBuilder.newDocument(); 

// root element 
org.w3c.dom.Element rootElement = doc.createElement("data"); 
doc.appendChild(rootElement); 

org.w3c.dom.Element object_id = doc.createElement("object_id"); 
rootElement.appendChild(object_id); 
object_id.appendChild(createElement(doc, "attribuName1", "value1")); 
object_id.appendChild(createElement(doc, "attribuName2", "value2")); 

XML结构:

<?xml version="1.0" encoding="UTF-8" standalone="no"?> 
<data> 
    <object_id> 
     <field name="name2" value="2"/> 
     <field name="name1" value="1"/> 
    </object_id> 
</data> 

现在我创建CallableStatement来调用过程并传递一些值以及我想在这里传递XML文档。

CallableStatement cstmt = conn.prepareCall("{? = CALL SCHEMA.PROC_DATA_XML(?,?,?)}"); 
cstmt.setString(1, "StringParam1"); 
cstmt.setInt(2, 9999); 
//!this is where i want to pass that XML document. So how should i do this? I tried this one: 
cstmt.setObject(3, doc); 

cstmt.registerOutParameter(1, Types.INTEGER); 
cstmt.executeUpdate(); 
float result = cstmt.getInt(1); 

程序代码:

CREATE OR REPLACE PROCEDURE PROC_DATA_XML(
    ID IN SCHEMA.XML.ID%TYPE ,--varchar(4) 
    ID2 IN SCHEMA.XML.ID2%TYPE ,--number(4) 
    RESULT OUT SCHEMA.XML.RESULT%TYPE, -- 0 – OK 1 – NOT OK 
    XML_DATA IN SCHEMA.XML.DATA_CONTENT%TYPE --XML File 
    ) IS 
BEGIN 

也许有人可以给我提供的是如何做到这一点在Java另一种方式?

+0

请在问题'SCHEMA.XML'结构中显示。 – Seyran

+0

@Seyran我加了 – arccuks

+0

如果我在你那里,我会通过最后一个参数作为CLOB。 – Seyran

回答