2017-01-11 10 views
1

Oracle DBからXMLTypeファイルをJavaアプリケーションにロードしました。 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ファイルを読み込む:私はこのようになります。これは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> 
+0

XMLを変更し、この変更を加えてデータベースを更新することは目的ですか?その場合は、なぜJavaを使用するのですか?データベース内のXMLを変更するだけです。 – MT0

+0

私はXPathやXQueryのような他の方法があることを知っていますが、私はDOMを使ってアプリ内でそれを修正する必要があります。 – monterinio

答えて

0

あなたは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()+"'" 
); 

ます。また、バインド変数を使用することを検討すべきですあなたの準備された声明で。

+0

okですが、これはxpathアプローチです。どのようにDOMのアプローチでそれを行うには? – monterinio

0

解決策が見つかりました。 setTextContent()というメソッドがあり、setNodeValue() の代わりに使用する必要があります。

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

updateXMLは廃止されました。 XQUERY-UPDATE機能とXMLQUERY演算子を試してみてください。

関連する問題