diff --git a/ws/eclipse/Sda1PreExam/src/xml2rdbms/BillingHandler.java b/ws/eclipse/Sda1PreExam/src/xml2rdbms/BillingHandler.java new file mode 100644 index 0000000000000000000000000000000000000000..13bf2f13eb43e080a052ea77671caaf619c15f66 --- /dev/null +++ b/ws/eclipse/Sda1PreExam/src/xml2rdbms/BillingHandler.java @@ -0,0 +1,28 @@ +package xml2rdbms; + +import org.xml.sax.Attributes; +import org.xml.sax.SAXException; +import org.xml.sax.helpers.DefaultHandler; + +public class BillingHandler extends DefaultHandler { + + String currentElement; + + @Override + public void startElement(String uri, String localName, String qName, + Attributes attributes) throws SAXException { + currentElement = qName; + + } + + @Override + public void characters(char[] ch, int start, int length) + throws SAXException { + final String content = new String(ch, start, length); + if (0 < content.trim().length()) { + System.out.println("Current element '" + currentElement + + "' contains text value '" + content + "'"); + } + } + +} diff --git a/ws/eclipse/Sda1PreExam/src/xml2rdbms/SqlDriver.java b/ws/eclipse/Sda1PreExam/src/xml2rdbms/SqlDriver.java new file mode 100644 index 0000000000000000000000000000000000000000..727879c370cd8e1bc732579b9ddfe23756cebde2 --- /dev/null +++ b/ws/eclipse/Sda1PreExam/src/xml2rdbms/SqlDriver.java @@ -0,0 +1,27 @@ +package xml2rdbms; + +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.SQLException; +import java.sql.Statement; + +public class SqlDriver { + + public static void main(String[] args) { + + try { + Class.forName("com.mysql.jdbc.Driver"); + } catch (ClassNotFoundException e1) { + System.out.println("Unable to load database driver"); + } + try { + final Connection conn = DriverManager.getConnection( + "jdbc:mysql://localhost:3306/hdm", "hdmuser", "XYZ"); + final Statement stmt = conn.createStatement(); + + conn.close(); + } catch (SQLException e) { + System.out.println("Database problem"); + } + } +} diff --git a/ws/eclipse/Sda1PreExam/src/xml2rdbms/XmlDriver.java b/ws/eclipse/Sda1PreExam/src/xml2rdbms/XmlDriver.java new file mode 100644 index 0000000000000000000000000000000000000000..60e769f2c4669878c9c31c66348233271ff5f380 --- /dev/null +++ b/ws/eclipse/Sda1PreExam/src/xml2rdbms/XmlDriver.java @@ -0,0 +1,29 @@ +package xml2rdbms; + +import java.io.IOException; + +import javax.xml.parsers.ParserConfigurationException; +import javax.xml.parsers.SAXParser; +import javax.xml.parsers.SAXParserFactory; + + +public class XmlDriver { + + public static void main(String[] args) { + + BillingHandler billingHandler = new BillingHandler(); + + try { + final SAXParserFactory saxPf = SAXParserFactory.newInstance(); + final SAXParser saxParser = saxPf.newSAXParser(); + saxParser.parse("src/xml2rdbms/data.xml", billingHandler); + } catch (ParserConfigurationException e){ + e.printStackTrace(System.err); + } catch (org.xml.sax.SAXException e) { + e.printStackTrace(System.err); + } catch (IOException e){ + e.printStackTrace(System.err); + } + } + +} diff --git a/ws/eclipse/Sda1PreExam/src/xml2rdbms/data.xml b/ws/eclipse/Sda1PreExam/src/xml2rdbms/data.xml new file mode 100644 index 0000000000000000000000000000000000000000..f4aaa9f232f547917a55577f407108eec79928fa --- /dev/null +++ b/ws/eclipse/Sda1PreExam/src/xml2rdbms/data.xml @@ -0,0 +1,15 @@ +<?xml version="1.0" encoding="UTF-8"?> +<items> + <item partNum="872-AA" transactionId="3304"> + <productName>Lawnmower</productName> + <quantity>1</quantity> + <USPrice>148.95</USPrice> + <comment>Confirm this is electric</comment> + </item> + <item partNum="926-AA" transactionId="3305"> + <productName>Baby Monitor</productName> + <quantity>3</quantity> + <USPrice>39.98</USPrice> + <shipDate>1999-05-21</shipDate> + </item> +</items> \ No newline at end of file diff --git a/ws/eclipse/Sda1PreExam/src/xml2rdbms/solution/BillingHandler.java b/ws/eclipse/Sda1PreExam/src/xml2rdbms/solution/BillingHandler.java new file mode 100644 index 0000000000000000000000000000000000000000..59590b14d3bbf78887c70e684586ea5ea4a38e91 --- /dev/null +++ b/ws/eclipse/Sda1PreExam/src/xml2rdbms/solution/BillingHandler.java @@ -0,0 +1,59 @@ +package xml2rdbms.solution; + +import org.xml.sax.Attributes; +import org.xml.sax.SAXException; +import org.xml.sax.helpers.DefaultHandler; + +public class BillingHandler extends DefaultHandler { + + String currentOpenElement = null; + + int transactionId, quantity; + String partNum, comment; + + final DatabaseAccess dba = new DatabaseAccess(); + + @Override + public void startDocument() throws SAXException { + dba.connect(); + } + + @Override + public void startElement(String uri, String localName, String qName, + Attributes attributes) throws SAXException { + currentOpenElement = qName; // Required state information in subsequent calls to + // characters(char[] ch, int start, int length) + + if (currentOpenElement.equals("item")) { // Starting new record + transactionId = Integer.parseInt(attributes.getValue("transactionId")); + partNum = attributes.getValue("partNum"); + comment = null; // Reset in case element is absent in current record + } + } + + @Override + public void characters(char[] ch, int start, int length) + throws SAXException { + if (null != currentOpenElement ) { + final String content = new String(ch, start, length); + switch(currentOpenElement) { + case "quantity": quantity = Integer.parseInt(content); break; + case "comment": comment = content; break; + } + } + } + + @Override + public void endDocument() throws SAXException { + dba.close(); + } + + @Override + public void endElement(String uri, String localName, String qName) + throws SAXException { + if (qName.equals("item")) { // Write current record to database + dba.insert(transactionId, partNum, quantity, comment); + } + currentOpenElement = null; + } +} diff --git a/ws/eclipse/Sda1PreExam/src/xml2rdbms/solution/DatabaseAccess.java b/ws/eclipse/Sda1PreExam/src/xml2rdbms/solution/DatabaseAccess.java new file mode 100644 index 0000000000000000000000000000000000000000..4eba075972a95b86b65fa4a0a9562d1384edd68a --- /dev/null +++ b/ws/eclipse/Sda1PreExam/src/xml2rdbms/solution/DatabaseAccess.java @@ -0,0 +1,61 @@ +package xml2rdbms.solution; + +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.SQLException; +import java.sql.Statement; + +public class DatabaseAccess { + + static { // One time driver registration + try { + Class.forName("com.mysql.jdbc.Driver"); + } catch (ClassNotFoundException e1) { + System.err.println("Unable to register JDBC driver"); + } + } + + private Connection conn; + private Statement stmt; + + + public void connect() { + try { + conn = DriverManager.getConnection( + "jdbc:mysql://localhost:3306/hdm", "hdmuser", "XYZ"); + try { + stmt = conn.createStatement(); + } catch (SQLException e) { + System.err.println("Unable to create statement"); + } + } catch (SQLException e) { + System.err.println("Unable to connect to database server"); + } + } + public void close() { + try { + conn.close(); + } catch (SQLException e) { + System.err.println("Unable to close connection"); + } + } + public void insert(final int transactionId, final String partNum, final int quantity, + final String comment) { + + final String insertStmt; + if (null == comment) { + insertStmt = "INSERT INTO Billing VALUES(" + transactionId + + ", '" + partNum + "', " + quantity + ", NULL)"; + } else { + insertStmt = "INSERT INTO Billing VALUES(" + transactionId + + ", '" + partNum + "', " + quantity + ", '" + comment + "')"; + } + + try { + stmt.executeUpdate(insertStmt); + } catch (SQLException e) { + System.err.println("Unable to insert dataset:" + e.getLocalizedMessage()); + } + } + +} diff --git a/ws/eclipse/Sda1PreExam/src/xml2rdbms/solution/TestDatabaseAccess.java b/ws/eclipse/Sda1PreExam/src/xml2rdbms/solution/TestDatabaseAccess.java new file mode 100644 index 0000000000000000000000000000000000000000..86abe885763029e5f8954e76fc472f05c196a73f --- /dev/null +++ b/ws/eclipse/Sda1PreExam/src/xml2rdbms/solution/TestDatabaseAccess.java @@ -0,0 +1,15 @@ +package xml2rdbms.solution; + +public class TestDatabaseAccess { + + public static void main(String[] args) { + DatabaseAccess dba = new DatabaseAccess(); + dba.connect(); + + dba.insert(3304, "872-AA", 1, "Confirm this is electric"); + dba.insert(3305, "926-AA", 3, null); + dba.close(); + + } + +} diff --git a/ws/eclipse/Sda1PreExam/src/xml2rdbms/solution/XmlDriver.java b/ws/eclipse/Sda1PreExam/src/xml2rdbms/solution/XmlDriver.java new file mode 100644 index 0000000000000000000000000000000000000000..fbaf53fefaa5c6a5eb8480f466978c9022c79261 --- /dev/null +++ b/ws/eclipse/Sda1PreExam/src/xml2rdbms/solution/XmlDriver.java @@ -0,0 +1,29 @@ +package xml2rdbms.solution; + +import java.io.IOException; + +import javax.xml.parsers.ParserConfigurationException; +import javax.xml.parsers.SAXParser; +import javax.xml.parsers.SAXParserFactory; + + +public class XmlDriver { + + public static void main(String[] args) { + + BillingHandler billingHandler = new BillingHandler(); + + try { + final SAXParserFactory saxPf = SAXParserFactory.newInstance(); + final SAXParser saxParser = saxPf.newSAXParser(); + saxParser.parse("src/xml2rdbms/data.xml", billingHandler); + } catch (ParserConfigurationException e){ + e.printStackTrace(System.err); + } catch (org.xml.sax.SAXException e) { + e.printStackTrace(System.err); + } catch (IOException e){ + e.printStackTrace(System.err); + } + } + +}