XML Features of Oracle 8i and 9i (3/7) - exploring XML
XML Features of Oracle 8i and 9i
XSU via Java API
The following basic code shows a connection to the database, use of OracleXMLQuery class and how to output that as a string:
import oracle.jdbc.driver.*; import oracle.xml.sql.query.OracleXMLQuery; import java.lang.*; import java.sql.*; DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver()); DriverManager.getConnection("jdbc:oracle:thin:@myserver.mydomain:1521:MY_SID", "scott","tiger"); OracleXMLQuery qry = new OracleXMLQuery(conn, "select * from emp"); String str = qry.getXMLString(); System.out.println(" The XML output is:\n"+ str); qry.close();
In practice you would normally want the data in DOM form:
XMLDocument domDoc = qry.getXMLDOM();
For web applications, you would usually need to write code to deal with a recordset, specifying how many records should be output at a time and being able to paginate backwards and forwards. This is done by using a recordset object and moving with rset.absolute(startRow); rset.relative(10);
With the data as XML, you would normally use the Oracle XML parser, for example to apply an XSL stylesheet before final output:
/* example code simplified/non-functional - only for illustration */ import oracle.xml.parser.v2.*; // instantiate a stylesheet XSLStylesheet xsl = new XSLStylesheet(xsldoc, xslURL); XSLProcessor processor = new XSLProcessor(); // Process XSL DocumentFragment result = processor.processXSL(xsl, xml); // create an output document to hold the result out = new XMLDocument(); // create a dummy document element for the output document Element root = out.createElement("root"); out.appendChild(root); // append the transformed tree to the dummy document element root.appendChild(result);
For updates and deletes, use the OracleXMLSave class. The KeyColumnList property identifies which columns are used for the key.
import oracle.xml.sql.dml.OracleXMLSave; DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver()); DriverManager.getConnection("jdbc:oracle:thin:@myserver.mydomain:1521:MY_SID", "scott","tiger"); String [] keyColNames = new String[1]; keyColNames[1] = "EMPNO"; sav.setKeyColumnList(keyColNames); sav.updateXML(XMLfilename); sav.close();
With the following XML as the input file:
<ROWSET> <ROW num="1"> <EMPNO>7369</EMPNO> <SAL>1800</SAL> <DEPTNO>30</DEPTNO> </ROW> <ROW> <EMPNO>2290</EMPNO> <SAL>2000</SAL> <HIREDATE>12/31/1992</HIREDATE> </ROW> <!-- additional rows ... --> </ROWSET>
would apply these two updates:
update scott.emp SET SAL = 1800 and DEPTNO = 30 WHERE EMPNO = 7369; update scott.emp SET SAL = 2000 and HIREDATE = 12/31/1992 WHERE EMPNO = 2290;
As mentioned above, PL/SQL also has an API for XSU with the same functionality.
On to XSQL...
Produced by Michael Claßen
URL: https://www.webreference.com/xml/column81/3.html
Created: May 10, 2003
Revised: May 10, 2003