Advertisement
Guest User

Untitled

a guest
Apr 1st, 2017
110
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 7.09 KB | None | 0 0
  1.  
  2. /*
  3.  * This program illustrates the use of Oracle XML-SQL Utility (XSU) Java API
  4.  *
  5.  */
  6.  
  7. package oraclexsuexample;
  8.  
  9. import java.sql.*;
  10. import java.net.URL;
  11. import java.util.Scanner;
  12. import oracle.xml.sql.query.OracleXMLQuery;
  13. import oracle.xml.sql.dml.OracleXMLSave;
  14.  
  15. /**
  16.  *
  17.  * @author Piyush Ojha
  18.  */
  19. public class OracleXSUExample {
  20.  
  21.    
  22.   public static void main (String args []) {
  23.       // throws SQLException, IOException {
  24.  
  25.       // the following statement loads the Oracle jdbc driver
  26.  
  27.     try {
  28.       Class.forName ("oracle.jdbc.driver.OracleDriver");
  29.     } catch (ClassNotFoundException e) {
  30.         System.out.println ("Could not load the driver");
  31.       }
  32.    
  33.     String user, pass, host, servicename;
  34.    
  35.     Scanner sc = new Scanner(System.in);
  36.     System.out.println("Type userid, password, hostname or ipaddress: ");
  37.     user = sc.next();
  38.     pass = sc.next();
  39.     host = sc.next();
  40.     servicename = "xe";
  41.     System.out.println(user+" "+pass+" "+host);
  42.  
  43.     /*  userid, password and hostname are obtained from the console
  44.      *  It is assumed that the service name is XE and the database server
  45.      *  listens on the default port 1521.
  46.      */
  47.    
  48.     try (                                     //try-with-resources
  49.       Connection conn = DriverManager.getConnection
  50.         ("jdbc:oracle:thin:"+user+"/"+pass+"@"+host+":1521/"+servicename)
  51.     )
  52.     {
  53.    
  54.     /* JDBC default is to commit each SQL statement as it is sent to the database.  Setting autocommmit=false changes the default
  55.        behaviour so that transactions have to be committed explicity.
  56.      */
  57.     conn.setAutoCommit(false);
  58.  
  59.     //RETRIEVALS
  60.  
  61.     //  Create an OracleXMLQuery instance by supplying an SQL query string
  62.     // (One can also supply a JDBC ResultSet object)
  63.  
  64.     OracleXMLQuery qry = new OracleXMLQuery(conn, "select * from actor");
  65.     qry.keepObjectOpen(true); // so that we can getXMLString more than once
  66.  
  67.     // Obtain the result as an XML string.  
  68.     // (Alternatively, obtain the result as a DOM tree.)
  69.     // One can also set several OracleXMLQuery options.
  70.  
  71.     String str = qry.getXMLString();
  72.     System.out.println(str);
  73.  
  74.  
  75.     //INSERTIONS
  76.  
  77.  
  78.     // For inserting data, first create an OracleXMLSave object by passing table name
  79.     OracleXMLSave sav = new OracleXMLSave(conn, "Actor");
  80.  
  81.     // Set rowTag to ACTOR  because that is what we have done in the XML document
  82.     sav.setRowTag("ACTOR");
  83.  
  84.     // obtain the URL object for the data file
  85.     URL u = OracleXMLSave.getURL("xmldata/min_filmdb_xml_insert.txt");
  86.  
  87.     //  insert data
  88.     sav.insertXML(u);
  89.  
  90.     /* This effectively executes
  91.  
  92.     *  INSERT INTO Actor VALUES('Amitabh Bachchan', 'Male', 'Indian', '10-Mar-1950', 'Hum Hindustano');
  93.     *  INSERT INTO Actor VALUES('Ian McKellen', 'Male', 'British', '25-Apr-1960', 'Julius Caesar');
  94.  
  95.     *  The default behaviour is to insert all data in the XML document.  
  96.     *  Missing attributes are set to NULL
  97.     */
  98.  
  99.     // Let's check
  100.     OracleXMLQuery qry2 = new OracleXMLQuery(conn, "select * from actor");
  101.     System.out.println(qry2.getXMLString());
  102.    
  103.     /*  To insert data only into the specified columns from an XML document
  104.      *  (and ignore the remainder), we need to set a list of columns to be updated
  105.      */
  106.  
  107.     String [] colnames = new String [2];
  108.     colnames[0] = "ACTORNAME";
  109.     colnames[1] = "NATIONALITY";
  110.     sav.setUpdateColumnList(colnames);
  111.  
  112.     u = OracleXMLSave.getURL("xmldata/min_filmdb_xml_inssomecols.txt");
  113.  
  114.     sav.insertXML(u);
  115.  
  116.     /* This effectively executes
  117.  
  118.     *  INSERT INTO Actor(ActorName, Nationality) VALUES('Shahrukh Khan', 'Indian');
  119.     *  INSERT INTO Actor(ActorName, Nationality) VALUES('Peter Sellers', 'British');
  120.     *  INSERT INTO Actor(ActorName, Nationality) VALUES('Emma Thompson', 'British');
  121.  
  122.     */
  123.  
  124.     // Let's check
  125.     OracleXMLQuery qry3 = new OracleXMLQuery(conn, "select * from actor");
  126.     System.out.println(qry3.getXMLString());
  127.  
  128.     sav.close();
  129.  
  130.    
  131.     //UPDATES
  132.  
  133.  
  134.     // Now change some rows according to the data in another XML file
  135.  
  136.     //  Having set update column list for sav, we are not sure how to 'unset' it.
  137.     //  Therefore create a new OracleXMLSave object.
  138.  
  139.     OracleXMLSave sav2 = new OracleXMLSave(conn, "Actor");
  140.     sav2.setRowTag("ACTOR");
  141.     u = OracleXMLSave.getURL("xmldata/min_filmdb_xml_update.txt");
  142.  
  143.     // Need to specify the  key columns for making updates
  144.     String[] keyColNames = new String [1];
  145.     keyColNames[0]="ACTORNAME";
  146.     sav2.setKeyColumnList(keyColNames);
  147.  
  148.     // Now update
  149.     sav2.updateXML(u);
  150.  
  151.     /* This effectively executes
  152.  
  153.     *  UPDATE Actor SET DOB='11-Sep-1946'. DebutFilmTitle='Saat Hindustani' WHERE ActorName = 'Amitabh Bachchan';
  154.     *  UPDATE Actor SET DebutFilmTitle='Anthony and Cleopatra' WHERE ActorName = 'Ian McKellen';
  155.  
  156.     */
  157.  
  158.     // Let's check
  159.     OracleXMLQuery qry4 = new OracleXMLQuery(conn, "select * from actor");
  160.     System.out.println(qry4.getXMLString());
  161.  
  162.     // To update only some of the columns (and ignore rest of the data in the XML document), we again need to specify
  163.     // an update column list.
  164.  
  165.     String [] updateColNames = new String [1];
  166.     updateColNames[0] = "DEBUTFILMTITLE";
  167.     sav2.setUpdateColumnList(updateColNames);
  168.     u = OracleXMLSave.getURL("xmldata/min_filmdb_xml_updsomecols.txt");
  169.  
  170.     sav2.updateXML(u);
  171.  
  172.     /* This effectively executes
  173.  
  174.     *  UPDATE Actor SET DebutFilmTitle='Amar, Akbar, Anthony' WHERE ActorName = 'Amitabh Bachchan';
  175.     *  UPDATE Actor SET DebutFilmTitle='King Lear' WHERE ActorName = 'Ian McKellen';
  176.  
  177.     */
  178.  
  179.  
  180.     // Let's check
  181.     OracleXMLQuery qry5 = new OracleXMLQuery(conn, "select * from actor");
  182.     System.out.println(qry5.getXMLString());
  183.  
  184.     sav2.close();
  185.  
  186.  
  187.     //DELETIONS
  188.  
  189.     OracleXMLSave sav3 = new OracleXMLSave(conn, "Actor");
  190.     sav3.setRowTag("ACTOR");
  191.  
  192.     URL u3 = OracleXMLSave.getURL("xmldata/min_filmdb_xml_delete.txt");
  193.  
  194.     sav3.deleteXML(u3);
  195.  
  196.     /* This effectively executes
  197.  
  198.     *  DELETE FROM  Actor WHERE ActorName = 'Amitabh Bachchan';
  199.     *  DELETE FROM  Actor WHERE ActorName = 'Judi Dench' AND DebutFilmTitle = 'Anthony and Cleopatra';
  200.  
  201.     *  Note that there is no row to match the 2nd deletetion criterion
  202.     */
  203.  
  204.     // Let's check
  205.     OracleXMLQuery qry6 = new OracleXMLQuery(conn, "select * from actor");
  206.     System.out.println(qry6.getXMLString());
  207.  
  208.     String[] keyColNames3 = new String [1];
  209.     keyColNames3[0]="ACTORNAME";
  210.     sav3.setKeyColumnList(keyColNames3);
  211.  
  212.     sav3.deleteXML(u3);
  213.  
  214.     /* Now
  215.  
  216.     *  DELETE FROM  Actor WHERE ActorName = 'Amitabh Bachchan';
  217.     *  DELETE FROM  Actor WHERE ActorName = 'Judi Dench';
  218.  
  219.     *  No match for the 1st deletion.  Dame Judi Dench now disappears
  220.     */
  221.  
  222.     // Let's check
  223.     OracleXMLQuery qry7 = new OracleXMLQuery(conn, "select * from actor");
  224.     System.out.println(qry7.getXMLString());
  225.  
  226.     conn.commit();
  227.  
  228.     qry.close();
  229.  
  230.     conn.close();
  231.    
  232.     }
  233.     catch (SQLException se) {
  234.        
  235.         se.printStackTrace(System.err);
  236.        
  237.     }
  238.   }
  239. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement