From 40ffa5591716b6ff16dfcdea7693415af08a71ec Mon Sep 17 00:00:00 2001 From: "Dr. Martin Goik" <goik@hdm-stuttgart.de> Date: Sat, 23 Feb 2019 19:49:38 +0100 Subject: [PATCH] Cosmetics, Auto close connection --- .../Solve/src/main/java/Driver.java | 10 +- .../de/hdm_stuttgart/mi/sda1/Book2Rdbms.java | 149 ++++++++---------- 2 files changed, 75 insertions(+), 84 deletions(-) diff --git a/Klausuren/Sda1/2018Winter/Solve/src/main/java/Driver.java b/Klausuren/Sda1/2018Winter/Solve/src/main/java/Driver.java index 5aed9b810..ed7f34ded 100644 --- a/Klausuren/Sda1/2018Winter/Solve/src/main/java/Driver.java +++ b/Klausuren/Sda1/2018Winter/Solve/src/main/java/Driver.java @@ -2,10 +2,10 @@ import de.hdm_stuttgart.mi.sda1.Book2Rdbms; public class Driver { - public static void main(String[] args) { - - final Book2Rdbms book2rdbms = new Book2Rdbms(); - book2rdbms.execute(); + public static void main(String[] args) { + try (final Book2Rdbms book2rdbms = new Book2Rdbms()) { + book2rdbms.execute(); } -} + } +} \ No newline at end of file diff --git a/Klausuren/Sda1/2018Winter/Solve/src/main/java/de/hdm_stuttgart/mi/sda1/Book2Rdbms.java b/Klausuren/Sda1/2018Winter/Solve/src/main/java/de/hdm_stuttgart/mi/sda1/Book2Rdbms.java index e547bc658..7705bde1b 100644 --- a/Klausuren/Sda1/2018Winter/Solve/src/main/java/de/hdm_stuttgart/mi/sda1/Book2Rdbms.java +++ b/Klausuren/Sda1/2018Winter/Solve/src/main/java/de/hdm_stuttgart/mi/sda1/Book2Rdbms.java @@ -1,10 +1,7 @@ package de.hdm_stuttgart.mi.sda1; import org.jdom2.*; -import org.jdom2.filter.ElementFilter; import org.jdom2.input.SAXBuilder; -import org.jdom2.xpath.XPathExpression; -import org.jdom2.xpath.XPathFactory; import java.io.File; import java.io.IOException; @@ -13,91 +10,85 @@ import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.SQLException; -public class Book2Rdbms implements AutoCloseable{ +public class Book2Rdbms implements AutoCloseable { - private Connection conn; + private Connection conn; - private PreparedStatement insertSection, insertPara; + private PreparedStatement insertSection, insertPara; - private Document doc; + private Element book; - public Book2Rdbms() { - try { - conn = DriverManager.getConnection( - "jdbc:mysql://localhost/hdm?serverTimezone=UTC", "hdmuser", "XYZ"); - insertSection = conn.prepareStatement( - "INSERT INTO Section (id, title, parent, revisionFlag) VALUES (?, ?, ?, ?);"); + public Book2Rdbms() { + try { + conn = DriverManager.getConnection( + "jdbc:mysql://localhost/hdm?serverTimezone=UTC", "hdmuser", "XYZ"); + insertSection = conn.prepareStatement( + "INSERT INTO Section (id, title, parent, revisionFlag) VALUES (?, ?, ?, ?);"); - insertPara = conn.prepareStatement( - "INSERT INTO Para (section, para, revisionFlag) VALUES (?, ?, ?)"); + insertPara = conn.prepareStatement( + "INSERT INTO Para (section, para, revisionFlag) VALUES (?, ?, ?)"); - } catch (SQLException e) { - System.err.println("Unable to establish connection: " + e); - System.exit(1); - } - - final SAXBuilder builder = new SAXBuilder(); - try { - doc = builder.build(new File("Schema/sampledata.xml")); - //getClass().getClassLoader().getResource("Schema/sampledata.xml")); - } catch (JDOMException e) { - e.printStackTrace(); - System.err.println("Unable to parse input: " + e); - System.exit(1); - } catch (IOException e) { - e.printStackTrace(); - System.err.println("Unable to read input: " + e); - System.exit(1); - } + } catch (SQLException e) { + System.err.println("Unable to establish connection: " + e); + System.exit(1); } - public void execute() { - - final XPathExpression<Element> xpathSearchPara = - XPathFactory.instance().compile( - "/book/section" , - new ElementFilter(), - null , - Namespace.getNamespace(null)); - - xpathSearchPara.evaluate(doc).forEach(this::handleSection); - } - private void handleSection(final Element section) { // Top level sections - handleSection(null, section); // No parent. + final SAXBuilder builder = new SAXBuilder(); + try { + book = builder.build(new File("Schema/sampledata.xml")).getRootElement(); + } catch (JDOMException e) { + e.printStackTrace(); + System.err.println("Unable to parse input: " + e); + System.exit(1); + } catch (IOException e) { + e.printStackTrace(); + System.err.println("Unable to read input: " + e); + System.exit(1); } - - private void handleSection(final String parentId, final Element section) { - try { - insertSection.setString(1, section.getAttributeValue("id")); - insertSection.setString(2, section.getChildText("title")); - insertSection.setString(3, parentId); - insertSection.setString(4, section.getAttributeValue("revisionflag")); - insertSection.execute(); - - section.getChildren("section").forEach( // recurse to child <section> elements - s -> handleSection(section.getAttributeValue("id") ,s)); - - section.getChildren("para").forEach( p -> { - try { - insertPara.setString(1, section.getAttributeValue("id")); - insertPara.setString(2, p.getValue()); - insertPara.setString(3, p.getAttributeValue("revisionflag")); - insertPara.execute(); - } catch (final SQLException e) { - System.err.println("Unable to insert <para>: " + e); - System.exit(1); - } - } - ); - } catch (final SQLException e) { - e.printStackTrace(); - System.err.println("Unable to insert <section>: " + e); - System.exit(1); - } + } + + public void execute() { + // Top level <section> elements do not have a parent --> null. + book.getChildren("section").forEach(s -> handleSection(null, s)); + } + + private void handleSection(final String parentId, final Element section) { + try { + final String currentSectionId = section.getAttributeValue("id"); + insertSection.setString(1, currentSectionId); + insertSection.setString(2, section.getChildText("title")); + insertSection.setString(3, parentId); + insertSection.setString(4, section.getAttributeValue("revisionflag")); + + insertSection.execute(); + + section.getChildren("para").forEach(p -> { + try { + insertPara.setString(1, currentSectionId); + insertPara.setString(2, p.getValue()); + insertPara.setString(3, p.getAttributeValue("revisionflag")); + insertPara.execute(); + } catch (final SQLException e) { + System.err.println("Unable to insert <para>: " + e); + System.exit(1); + } + } + ); + // recurse to <section> children + section.getChildren("section").forEach(s -> handleSection(currentSectionId, s)); + } catch (final SQLException e) { + e.printStackTrace(); + System.err.println("Unable to insert <section>: " + e); + System.exit(1); } - - @Override - public void close() throws Exception { - conn.close(); + } + + @Override + public void close(){ + try { + conn.close(); + } catch (final SQLException e) { + e.printStackTrace(); } + } } \ No newline at end of file -- GitLab