2017-01-11 1 views
1

Oracle DB에서 Java app에 XMLType 파일을로드했습니다. Java XMLType 파일 수정

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_column에 데이터베이스 읽기 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();} 

, 내가 좋겠 I는 다음과 같습니다 XML 파일에 대한 작업을 처리하는 클래스를 준비 로드 된 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> 
+0

XML을 변경하고이 변경으로 데이터베이스를 업데이트하겠습니까? 그렇다면 Java를 전혀 사용하지 않는 이유는 데이터베이스의 XML 만 수정하면됩니다. – MT0

+0

XPath 또는 XQuery와 같은 다른 방법이 있지만 DOM을 사용하여 응용 프로그램 내에서 수정해야한다는 것을 알고 있습니다. – monterinio

답변

0
당신이 오라클에 보내는 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()+"'" 
); 

또한 바인드 변수를 사용하는 것이 좋습니다 준비된 진술에

+0

괜찮지 만 xpath 방식입니다. DOM 접근 방식으로 어떻게 할 것인가? – monterinio

0

해결책을 찾았습니다. setTextContent()setNodeValue() 대신 사용해야합니다.

tables[5].getXml_column().getElementsByTagName("ISPAID").item(0).getChildNodes().item(0).setTextContent("Y"); 
0

updateXML은 (는) 더 이상 사용되지 않습니다. XQUERY-UPDATE 기능과 XMLQUERY 연산자를 사용해보십시오.