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);
+		    }
+	}
+
+}