javaxmltype文件修改

javaxmltype文件修改,java,xml,database,oracle,xmltype,Java,Xml,Database,Oracle,Xmltype,我将一个XMLType文件从Oracle DB加载到Java应用程序中。我准备了一个类来处理XML文件上的操作,如下所示: public class XMLDoc { private OraclePreparedStatement stmt; private ResultSet rset; private OracleResultSet orset; private Document xml_column; private XMLType poxml; public XMLDoc(Connec

我将一个XMLType文件从Oracle DB加载到Java应用程序中。我准备了一个类来处理XML文件上的操作,如下所示:

public class XMLDoc {
private OraclePreparedStatement stmt;
private ResultSet rset;
private OracleResultSet orset;
private Document xml_column;
private XMLType poxml;

public XMLDoc(Connection con, String Query) throws Exception {
    setStmt((OraclePreparedStatement)
            con.prepareStatement(Query));
    setRset(getStmt().executeQuery());
    setOrset((OracleResultSet) rset);
}}
在主程序中,我连接到数据库并将XML文件读入XML_列:

Connection con = DriverManager.getConnection(host, username, password);
tables[5] = (new XMLDoc(con, "SELECT p.PENALITESXML FROM PENALITES p WHERE id_order='"+data.getIdOrder()+"'"));
while(tables[5].getOrset().next()) {
            tables[5].setPoxml(XMLType.createXML(tables[5].getOrset().getOPAQUE("PENALITESXML")));
            tables[5].setXml_column((Document)tables[5].getPoxml().getDocument());
            Element element = tables[5].getXml_column().getDocumentElement();}
现在,我想修改加载的XML文档,因此我执行:

tables[5].getXml_column().getElementsByTagName("ISPAID").item(0).getChildNodes().item(0).setNodeValue("Y");
但是文档没有更新。我做错了什么

这是XML文件的外观:

<PENALITES ID_ORDER="50000">
    <PENALTY_AMOUNT>100</PENALTY_AMOUNT>
    <ISPAID>N</ISPAID>
</PENALITIES> 

100
N

您可以在发送给Oracle的SQL中非常简单地进行所有替换:

Connection con = DriverManager.getConnection(host, username, password);
tables[5] = new XMLDoc(
  con,
  "SELECT UPDATEXML( XMLType( PENALITESXML ), '/PENALTIES/ISPAID/text()', 'Y' ).getStringVal()"
  + " AS PENALTIESXML"
  + " FROM PENALITES"
  + " WHERE id_order='"+data.getIdOrder()+"'"
);

您还应该考虑在准备好的语句中使用绑定变量。

您可以在发送给Oracle的SQL中非常简单地执行所有替换:

Connection con = DriverManager.getConnection(host, username, password);
tables[5] = new XMLDoc(
  con,
  "SELECT UPDATEXML( XMLType( PENALITESXML ), '/PENALTIES/ISPAID/text()', 'Y' ).getStringVal()"
  + " AS PENALTIESXML"
  + " FROM PENALITES"
  + " WHERE id_order='"+data.getIdOrder()+"'"
);

你也应该考虑在准备好的语句中使用绑定变量。

< p>我找到了一个解决方案。 必须使用一个方法
setTextContent()
,而不是
setNodeValue()

我找到了解决办法。 必须使用一个方法
setTextContent()
,而不是
setNodeValue()


updateXML已被弃用。您应该尝试使用XQUERY-UPDATE工具,XMLQUERY操作符已被弃用。您应该尝试使用XQUERY-UPDATE工具,XMLQUERY操作符的目的是更改XML并使用此更改更新数据库吗?如果是这样,为什么要使用Java呢?只需修改数据库中的XML即可。我知道还有其他方法,如XPath或XQuery,但我需要在应用程序中使用DOM对其进行修改。目的是更改XML并使用此更改更新数据库吗?如果是这样,为什么要使用Java呢?只需修改数据库中的XML即可。我知道还有其他方法,如XPath或XQuery,但我需要在应用程序中使用DOM对其进行修改。好的,但这是XPath方法。如何使用DOM方法?好的,但这是xpath方法。如何使用DOM方法实现这一点?