Skip to content
Snippets Groups Projects
Commit 7290f7fb authored by Goik Martin's avatar Goik Martin
Browse files

SAX input to Rdbms example

parent f7ad4427
No related branches found
No related tags found
No related merge requests found
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 + "'");
}
}
}
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");
}
}
}
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);
}
}
}
<?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
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;
}
}
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());
}
}
}
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();
}
}
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);
}
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment