From 5480cf28bc1ac6c26725cf7796d61c859ea20157 Mon Sep 17 00:00:00 2001
From: "Dr. Martin Goik" <goik@hdm-stuttgart.de>
Date: Sun, 24 Feb 2019 11:42:12 +0100
Subject: [PATCH] Transition to Postgresql

---
 Doc/Sda1/prerequisites.xml                    | 254 ++++--------------
 Klausuren/Sda1/2018Winter/Exam/.gitignore     |  49 +---
 .../Sda1/2018Winter/Exam/Schema/schema.sql    |   2 +-
 Klausuren/Sda1/2018Winter/Exam/pom.xml        |   6 +-
 .../de/hdm_stuttgart/mi/sda1/Book2Rdbms.java  |   2 +-
 .../hdm_stuttgart/mi/sda1}/Driver.java        |   5 +-
 Klausuren/Sda1/2018Winter/Solve/Doc/exam.xml  |   8 +-
 .../Sda1/2018Winter/Solve/Schema/schema.sql   |  38 ++-
 Klausuren/Sda1/2018Winter/Solve/pom.xml       |   6 +-
 .../de/hdm_stuttgart/mi/sda1/Book2Rdbms.java  |   3 +-
 .../hdm_stuttgart/mi/sda1}/Driver.java        |   2 +-
 11 files changed, 84 insertions(+), 291 deletions(-)
 rename Klausuren/Sda1/2018Winter/Exam/src/main/java/{ => de/hdm_stuttgart/mi/sda1}/Driver.java (77%)
 rename Klausuren/Sda1/2018Winter/Solve/src/main/java/{ => de/hdm_stuttgart/mi/sda1}/Driver.java (79%)

diff --git a/Doc/Sda1/prerequisites.xml b/Doc/Sda1/prerequisites.xml
index 90e62ad93..8908ad097 100644
--- a/Doc/Sda1/prerequisites.xml
+++ b/Doc/Sda1/prerequisites.xml
@@ -144,8 +144,8 @@
 
                 <itemizedlist>
                   <listitem>
-                    <para><link linkend="sda1_sect_setupMysql">Mysql database
-                    server</link></para>
+                    <para><link linkend="sda1_sect_setupPostgresql">Postgresql
+                    database server</link></para>
                   </listitem>
 
                   <listitem>
@@ -185,7 +185,7 @@
       xlink:href="https://www.postgresql.org">Postgresql</productname>
       database components</title>
 
-      <figure xml:id="sda1_fig_installPostgresql">
+      <figure xml:id="sda1_fig_postgresqlInstall">
         <title>Installing <xref linkend="glo_Soft_Postgresql"/></title>
 
         <para>Installation references:</para>
@@ -205,145 +205,44 @@
           </listitem>
         </itemizedlist>
       </figure>
-    </section>
-
-    <section xml:id="sda1_sect_setupMysql">
-      <title><productname
-      xlink:href="https://www.mysql.com">Mysql</productname> Database
-      components</title>
-
-      <figure xml:id="sda1_fig_installMysql">
-        <title>Installing <xref linkend="glo_Soft_Mysql"/></title>
-
-        <screen>root@goiki:~# aptitude -y install mysql-server
-The following NEW packages will be installed:
-  libdbd-mysql-perl{a} libdbi-perl{a} libnet-daemon-perl{a} libplrpc-perl{a}
-  mysql-client-5.5{a} mysql-server-5.5
-0 packages upgraded, 6 newly installed, 0 to remove and 0 not upgraded.
-...</screen>
-      </figure>
-
-      <para>During the installation you will be asked for the <productname
-      xlink:href="https://www.mysql.com">Mysql</productname> servers
-      <quote>root</quote> (Administrator) password:</para>
-
-      <figure xml:id="sda1_fig_installMysqlSetRootPw">
-        <title>Setting database root password</title>
-
-        <screen> ┌────────────────┤ Configuring mysql-server-5.5 ├─────────────────┐
- │ While not mandatory, it is highly recommended that you          │
- │ set a password for the MySQL administrative "root" user.        │
- │                                                                 │
- │ If this field is left blank, the password will not be changed.  │
- │                                                                 │
- │ New password for the MySQL "root" user:                         │
- │                                                                 │
- │ ********_______________________________________________________ │
- │                                                                 │
- │                                        &lt;Ok&gt;                     │
- └─────────────────────────────────────────────────────────────────┘
-</screen>
-      </figure>
 
-      <para>This has to be entered twice. Keep a <emphasis
-      role="bold">permanent</emphasis> record of this entry. Alternatively set
-      a bookmark to <uri
-      xlink:href="https://help.ubuntu.com/community/MysqlPasswordReset">https://help.ubuntu.com/community/MysqlPasswordReset</uri>
-      for later reference *** and don't blame me! ***.</para>
+      <figure xml:id="sda1_fig_postgresqlInstallUserPW">
+        <title>Configure <xref linkend="glo_Soft_Postgresql"/></title>
 
-      <para>At this point we should be able to connect to our newly installed
-      Server. We create a database <quote>hdm</quote> to be used for our
-      exercises:</para>
+        <screen>useradd -r -s /usr/sbin/nologin hdmuser <co
+            linkends="sda1_fig_postgresqlInstallUserPW-1"
+            xml:id="sda1_fig_postgresqlInstallUserPW-1-co"/>
 
-      <figure xml:id="sda1_fig_installMysqlConnectToDb">
-        <title>Connect to database</title>
+su - postgres -c "PGPASSWORD=XYZ createdb --owner hdmuser hdm" <co
+            linkends="sda1_fig_postgresqlInstallUserPW-2"
+            xml:id="sda1_fig_postgresqlInstallUserPW-2-co"/>
 
-        <screen>goik@hopc ~&gt; mysql -u root -p
-Enter password:
-
-... messages omitted for brevity ...
-
-mysql&gt; <emphasis role="bold">create database hdm CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;</emphasis> <co
-            linkends="sda1_prereq_screen_mysqlCreateDatabase-1"
-            xml:id="sda1_prereq_screen_mysqlCreateDatabase-1-co"/>
-Query OK, 1 row affected (0.00 sec)</screen>
-      </figure>
-
-      <calloutlist role="slideExclude">
-        <callout arearefs="sda1_prereq_screen_mysqlCreateDatabase-1-co"
-                 xml:id="sda1_prereq_screen_mysqlCreateDatabase-1">
-          <para>This parameter setting mitigates key limitations, <link
-          xlink:href="https://stackoverflow.com/questions/20014106/how-to-create-this-table-1071-specified-key-was-too-long-max-key-length-is/42497309#answer-49233800">see
-          detailed explanation</link>.</para>
-        </callout>
-      </calloutlist>
-
-      <para>Following <uri
-      xlink:href="https://dev.mysql.com/doc/refman/5.5/en/adding-users.html">https://dev.mysql.com/doc/refman/5.5/en/adding-users.html</uri>
-      we add <code>hdmuser</code> as a new user and grant full access to the
-      newly created database <code>hdm</code>:</para>
-
-      <figure xml:id="sda1_fig_installMysqlGrants">
-        <title>New user and privileges</title>
-
-        <screen>mysql&gt; <emphasis role="bold">CREATE USER '<emphasis
-              role="red">hdmuser</emphasis>'@'localhost' IDENTIFIED BY '<emphasis
-              role="red">XYZ</emphasis>';</emphasis> <co
-            linkends="sda1_fig_installMysqlGrants-1"
-            xml:id="sda1_fig_installMysqlGrants-1-co"/>
-mysql&gt; <emphasis role="bold">use</emphasis> <emphasis role="red">hdm</emphasis>; <co
-            linkends="sda1_fig_installMysqlGrants-2"
-            xml:id="sda1_fig_installMysqlGrants-2-co"/>
-mysql&gt; <emphasis role="bold">GRANT ALL PRIVILEGES ON *.* TO 'hdmuser'@'localhost' WITH GRANT OPTION;</emphasis> <co
-            linkends="sda1_fig_installMysqlGrants-3"
-            xml:id="sda1_fig_installMysqlGrants-3-co"/>
-mysql&gt; <emphasis role="bold">FLUSH PRIVILEGES;</emphasis> <co
-            linkends="sda1_fig_installMysqlGrants-4"
-            xml:id="sda1_fig_installMysqlGrants-4-co"/>
-mysql&gt; exit;</screen>
+PGPASSWORD=XYZ psql -h localhost --username=hdmuser -d hdm <co
+            linkends="sda1_fig_postgresqlInstallUserPW-3"
+            xml:id="sda1_fig_postgresqlInstallUserPW-3-co"/></screen>
 
         <calloutlist role="slideExclude">
-          <callout arearefs="sda1_fig_installMysqlGrants-1-co"
-                   xml:id="sda1_fig_installMysqlGrants-1">
-            <para>Create a new user <emphasis role="red">hdmuser</emphasis>
-            setting his password to <emphasis role="red">XYZ</emphasis>. The
-            localhost address will prevent external network access: The server
-            will only listen for connections originating from your local
-            machine.</para>
+          <callout arearefs="sda1_fig_postgresqlInstallUserPW-1-co"
+                   xml:id="sda1_fig_postgresqlInstallUserPW-1">
+            <para>Create a system user <code>hdmuser</code> at OS level. For
+            security reasons no system level access rights are being granted
+            to this account.</para>
           </callout>
 
-          <callout arearefs="sda1_fig_installMysqlGrants-2-co"
-                   xml:id="sda1_fig_installMysqlGrants-2">
-            <para>Switch to database <emphasis
-            role="red">hdm</emphasis>.</para>
+          <callout arearefs="sda1_fig_postgresqlInstallUserPW-2-co"
+                   xml:id="sda1_fig_postgresqlInstallUserPW-2">
+            <para>Create a database <code>hdm</code> with ownership
+            <code>hdmuser</code> using password <code>XYZ</code> on behalf of
+            user <code>postgres</code>.</para>
           </callout>
 
-          <callout arearefs="sda1_fig_installMysqlGrants-3-co"
-                   xml:id="sda1_fig_installMysqlGrants-3">
-            <para>Grant all privileges within <code>hdm</code> database to
-            <code>hdmuser</code>.</para>
-          </callout>
-
-          <callout arearefs="sda1_fig_installMysqlGrants-4-co"
-                   xml:id="sda1_fig_installMysqlGrants-4">
-            <para>Make grants permanent.</para>
+          <callout arearefs="sda1_fig_postgresqlInstallUserPW-3-co"
+                   xml:id="sda1_fig_postgresqlInstallUserPW-3">
+            <para>Connect to database <code>hdm</code> as user
+            <code>hdmuser</code> using password <code>XYZ</code>.</para>
           </callout>
         </calloutlist>
       </figure>
-
-      <para>You may want to test your configuration:</para>
-
-      <figure xml:id="sda1_fig_installMysqlConectHdmuser">
-        <title>Testing <code>hdmuser</code> access</title>
-
-        <screen>goik@hopc ~&gt; mysql --user=hdmuser --password=XYZ
-
-... messages omitted for brevity ...
-
-mysql&gt; use hdm;show tables;
-Database changed
-Empty set (0,00 sec)</screen>
-      </figure>
     </section>
 
     <section xml:id="sda1SqlClient">
@@ -352,7 +251,8 @@ Empty set (0,00 sec)</screen>
       <para>Since we are dealing with <xref linkend="glo_Java"/> a <trademark
       xlink:href="https://en.wikipedia.org/wiki/Java_Database_Connectivity">JDBC</trademark>
       a corresponding driver is needed to connecting applications to our
-      <productname xlink:href="https://www.mysql.com">Mysql</productname>
+      <productname
+      xlink:href="https://www.postgresql.org">Postgresql</productname>
       server:</para>
 
       <figure xml:id="sda1_fig_mysqlDriverByAptitude">
@@ -360,26 +260,27 @@ Empty set (0,00 sec)</screen>
         <command
         xlink:href="https://linux.die.net/man/8/aptitude">aptitude</command>.</title>
 
-        <screen>#&gt; <link xlink:href="https://linux.die.net/man/8/aptitude">aptitude</link> install libmysql-java</screen>
+        <screen>#&gt; apt-get install libpostgresql-jdbc-java</screen>
 
-        <screen>#&gt; cd /usr/share/java
-#&gt; ls -al <emphasis role="red">mysql</emphasis>*
--rw-r--r-- 1 ... 2011 <emphasis role="red">mysql-connector-java-5.1.16.jar</emphasis>
-lrwxrwxrwx 1 ... 2011 <emphasis role="red">mysql-connector-java.jar</emphasis> -&gt; mysql-connector-java-5.1.16.jar
-lrwxrwxrwx 1 ... 2011 <emphasis role="red">mysql.jar</emphasis> -&gt; mysql-connector-java.jar</screen>
+        <para>This provides:</para>
+
+        <screen># dpkg -L libpostgresql-jdbc-java
+/usr/share/java/postgresql.jar
+/usr/share/java/postgresql-jdbc4.jar
+...</screen>
       </figure>
 
       <para>A second approach works by adding the following dependency to your
       Maven project:</para>
 
       <figure xml:id="sda1_fig_mysqlDriverByMaven">
-        <title>Installing <xref linkend="glo_Soft_Mysql"/> driver using <xref
-        linkend="glo_Maven"/>.</title>
+        <title>Installing <xref linkend="glo_Soft_Postgresql"/> driver using
+        <xref linkend="glo_Maven"/>.</title>
 
         <programlisting language="xml">&lt;dependency&gt;
-  &lt;groupId&gt;mysql&lt;/groupId&gt;
-  &lt;artifactId&gt;<emphasis role="red">mysql-connector-java</emphasis>&lt;/artifactId&gt;
-  &lt;version&gt;<emphasis role="red">8.0.12</emphasis>&lt;/version&gt;
+  &lt;groupId&gt;postgresql&lt;/groupId&gt;
+  &lt;artifactId&gt;postgresql&lt;/artifactId&gt;
+  &lt;version&gt;9.1-901-1.jdbc4&lt;/version&gt;
 &lt;/dependency&gt;</programlisting>
 
         <screen>#&gt; mvn compile
@@ -395,76 +296,11 @@ lrwxrwxrwx 1 ... 2011 <emphasis role="red">mysql.jar</emphasis> -&gt; mysql-conn
           <title><xref linkend="glo_Soft_IntellijIDEA"/> <xref
           linkend="glo_Soft_Mysql"/> driver configuration</title>
 
-          <para>Configuration and usage of <xref linkend="glo_Soft_Mysql"/> is
-          being described in detail at <uri
-          xlink:href="https://www.jetbrains.com/help/idea/connecting-to-a-database.html#mysql">https://www.jetbrains.com/help/idea/connecting-to-a-database.html#mysql</uri>.</para>
+          <para>Configuration and usage of <xref
+          linkend="glo_Soft_Postgresql"/> is being described in detail at <uri
+          xlink:href="https://www.jetbrains.com/help/idea/connecting-to-a-database.html#connect-to-postgresql-database">https://www.jetbrains.com/help/idea/connecting-to-a-database.html#mysql</uri>.</para>
         </figure>
       </section>
-
-      <section xml:id="sda1ConfigOracleSqldevelop">
-        <title>Configuring <productname
-        xlink:href="http://www.oracle.com/technetwork/developer-tools/sql-developer">Oracle
-        SQL Developer</productname>.</title>
-
-        <figure xml:id="sda1_fig_mysqlSqldeveloperDriverConfig">
-          <title><productname>Sqldeveloper</productname> <xref
-          linkend="glo_Soft_Mysql"/> driver configuration</title>
-
-          <mediaobject>
-            <imageobjectco>
-              <areaspec otherunits="imagemap" units="other">
-                <area coords="40,349,180,379"
-                      linkends="sda1_fig_mysqlSqldeveloperDriverConfig-1"
-                      xml:id="__area-6xwfe4"/>
-
-                <area coords="190,77,437,106"
-                      linkends="sda1_fig_mysqlSqldeveloperDriverConfig-2"
-                      xml:id="__area-yfm3td"/>
-              </areaspec>
-
-              <imageobject>
-                <imagedata fileref="Ref/Fig/sqldevelopAddMysqlJdbc.png.marked.svg"/>
-              </imageobject>
-
-              <calloutlist role="slideExclude">
-                <callout arearefs="__area-6xwfe4"
-                         xml:id="sda1_fig_mysqlSqldeveloperDriverConfig-1">
-                  <para>Select <option>Database</option> -&gt; <option>Third
-                  Party JDBC Drivers</option>.</para>
-                </callout>
-
-                <callout arearefs="__area-yfm3td"
-                         xml:id="sda1_fig_mysqlSqldeveloperDriverConfig-2">
-                  <para>Using <orgname>MySQL or other database server products
-                  requires configuration of a related</orgname> <xref
-                  linkend="glo_JDBC"/> connector via <guimenu>Tools</guimenu>
-                  --&gt; <guisubmenu>Preferences</guisubmenu> choosing from
-                  <guisubmenu>Database</guisubmenu> --&gt; <guisubmenu>Third
-                  Party JDBC Drivers</guisubmenu>. The MI/Ubuntu systems
-                  already provide a driver instance at
-                  <filename>/usr/share/java/mysql-connector-java.jar</filename>.
-                  You may however use external downloads as well.</para>
-                </callout>
-              </calloutlist>
-            </imageobjectco>
-          </mediaobject>
-        </figure>
-
-        <figure xml:id="sda1_fig_mysqlSqldeveloperConnectionConfig">
-          <title><productname>Sqldeveloper</productname> <xref
-          linkend="glo_Soft_Mysql"/> connection configuration</title>
-
-          <mediaobject>
-            <imageobject>
-              <imagedata fileref="Ref/Fig/sqldevelopChooseMysqlpng.png"/>
-            </imageobject>
-          </mediaobject>
-        </figure>
-
-        <para>In case of trouble you may want to consult <quote
-        xlink:href="http://rpbouman.blogspot.de/2007/01/oracle-sql-developer-11-supports-mysql.html">Oracle
-        SQL Developer 1.1 Supports MySQL</quote> for further details.</para>
-      </section>
     </section>
   </section>
 
diff --git a/Klausuren/Sda1/2018Winter/Exam/.gitignore b/Klausuren/Sda1/2018Winter/Exam/.gitignore
index 9b36bc511..b9badad8b 100644
--- a/Klausuren/Sda1/2018Winter/Exam/.gitignore
+++ b/Klausuren/Sda1/2018Winter/Exam/.gitignore
@@ -1,3 +1,5 @@
+.idea
+*.iml
 /target/
 /.settings/
 .classpath
@@ -5,50 +7,3 @@
 dependency-reduced-pom.xml
 *.log
 
-# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and Webstorm
-# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839
-
-# User-specific stuff:
-.idea/**/workspace.xml
-.idea/**/tasks.xml
-.idea/dictionaries
-
-# Sensitive or high-churn files:
-.idea/**/dataSources/
-.idea/**/dataSources.ids
-.idea/**/dataSources.xml
-.idea/**/dataSources.local.xml
-.idea/**/sqlDataSources.xml
-.idea/**/dynamic.xml
-.idea/**/uiDesigner.xml
-
-# Gradle:
-.idea/**/gradle.xml
-.idea/**/libraries
-
-# CMake
-cmake-build-debug/
-
-# Mongo Explorer plugin:
-.idea/**/mongoSettings.xml
-
-*.iws
-
-
-# IntelliJ
-out/
-
-# mpeltonen/sbt-idea plugin
-.idea_modules/
-
-# JIRA plugin
-atlassian-ide-plugin.xml
-
-# Cursive Clojure plugin
-.idea/replstate.xml
-
-# Crashlytics plugin (for Android Studio and IntelliJ)
-com_crashlytics_export_strings.xml
-crashlytics.properties
-crashlytics-build.properties
-fabric.properties
diff --git a/Klausuren/Sda1/2018Winter/Exam/Schema/schema.sql b/Klausuren/Sda1/2018Winter/Exam/Schema/schema.sql
index 6d356e353..fc0b21311 100644
--- a/Klausuren/Sda1/2018Winter/Exam/Schema/schema.sql
+++ b/Klausuren/Sda1/2018Winter/Exam/Schema/schema.sql
@@ -15,7 +15,7 @@ INSERT INTO  Para VALUES (
 
 
 INSERT INTO  Section VALUES ('valid', 'Valid documents',  'categories',          NULL,         4);
-INSERT INTO  Para VALUES ('valid', 'Valid documents require a schema.',          NULL,         5);
+INSERT INTO  Para VALUES ('valid', 'Valid documents require a schema.',          'changed',         5);
 INSERT INTO  Para VALUES ('valid', 'Common standards are DTD, XML Schema and Relax-NG.',NULL,  6);
 
 INSERT INTO  Section VALUES ('api', 'Available APIs', NULL,                       'deleted',    7);
diff --git a/Klausuren/Sda1/2018Winter/Exam/pom.xml b/Klausuren/Sda1/2018Winter/Exam/pom.xml
index b5641d291..9799537cc 100644
--- a/Klausuren/Sda1/2018Winter/Exam/pom.xml
+++ b/Klausuren/Sda1/2018Winter/Exam/pom.xml
@@ -56,9 +56,9 @@
     </dependency>
 
     <dependency>
-      <groupId>mysql</groupId>
-      <artifactId>mysql-connector-java</artifactId>
-      <version>6.0.6</version>
+      <groupId>postgresql</groupId>
+      <artifactId>postgresql</artifactId>
+      <version>9.1-901-1.jdbc4</version>
     </dependency>
 
     <dependency>
diff --git a/Klausuren/Sda1/2018Winter/Exam/src/main/java/de/hdm_stuttgart/mi/sda1/Book2Rdbms.java b/Klausuren/Sda1/2018Winter/Exam/src/main/java/de/hdm_stuttgart/mi/sda1/Book2Rdbms.java
index 62daf2166..fda3f75ab 100644
--- a/Klausuren/Sda1/2018Winter/Exam/src/main/java/de/hdm_stuttgart/mi/sda1/Book2Rdbms.java
+++ b/Klausuren/Sda1/2018Winter/Exam/src/main/java/de/hdm_stuttgart/mi/sda1/Book2Rdbms.java
@@ -21,7 +21,7 @@ public class Book2Rdbms {
     public Book2Rdbms() {
         try {
             conn = DriverManager.getConnection(
-                    "jdbc:mysql://localhost/hdm?serverTimezone=UTC", "hdmuser", "XYZ");
+                "jdbc:postgresql://localhost/hdm", "hdmuser", "XYZ");
         } catch (SQLException e) {
             System.err.println("Unable to establish connection: " + e);
             System.exit(1);
diff --git a/Klausuren/Sda1/2018Winter/Exam/src/main/java/Driver.java b/Klausuren/Sda1/2018Winter/Exam/src/main/java/de/hdm_stuttgart/mi/sda1/Driver.java
similarity index 77%
rename from Klausuren/Sda1/2018Winter/Exam/src/main/java/Driver.java
rename to Klausuren/Sda1/2018Winter/Exam/src/main/java/de/hdm_stuttgart/mi/sda1/Driver.java
index 5aed9b810..c339cecdf 100644
--- a/Klausuren/Sda1/2018Winter/Exam/src/main/java/Driver.java
+++ b/Klausuren/Sda1/2018Winter/Exam/src/main/java/de/hdm_stuttgart/mi/sda1/Driver.java
@@ -1,4 +1,4 @@
-import de.hdm_stuttgart.mi.sda1.Book2Rdbms;
+package de.hdm_stuttgart.mi.sda1;
 
 public class Driver {
 
@@ -6,6 +6,5 @@ public class Driver {
 
         final Book2Rdbms book2rdbms = new Book2Rdbms();
         book2rdbms.execute();
-
     }
-}
+}
\ No newline at end of file
diff --git a/Klausuren/Sda1/2018Winter/Solve/Doc/exam.xml b/Klausuren/Sda1/2018Winter/Solve/Doc/exam.xml
index 5a5198ec4..9ec4efb3d 100644
--- a/Klausuren/Sda1/2018Winter/Solve/Doc/exam.xml
+++ b/Klausuren/Sda1/2018Winter/Solve/Doc/exam.xml
@@ -292,7 +292,7 @@
       the skeleton project import.</para>
 
       <para>A database connection may already be configured on IDE level. If
-      not configure a <productname>Mysql</productname> type database
+      not configure a <productname>Postgresql</productname> type database
       connection yourself in <productname>IDEA</productname> (»Views« --&gt;
       »Tool Windows« --&gt; »Database«) using:</para>
 
@@ -539,6 +539,12 @@
       <para>Write a Java application reading <tag class="starttag">book</tag>
       document instances and writing their content to a relational
       database.</para>
+
+      <para>Class
+      <package>de.hdm_stuttgart.mi.sda1</package>.<classname>Book2Rdbms</classname>
+      already provides code establishing a database connection and reading
+      your <filename>sampledata.xml</filename> file upon execution by
+      <package>de.hdm_stuttgart.mi.sda1</package>.<classname>Driver</classname>.</para>
     </section>
 
     <section xml:id="task3_tasks">
diff --git a/Klausuren/Sda1/2018Winter/Solve/Schema/schema.sql b/Klausuren/Sda1/2018Winter/Solve/Schema/schema.sql
index dd4fafeed..e211e1b22 100644
--- a/Klausuren/Sda1/2018Winter/Solve/Schema/schema.sql
+++ b/Klausuren/Sda1/2018Winter/Solve/Schema/schema.sql
@@ -2,46 +2,42 @@ DROP TABLE IF EXISTS Para;
 DROP TABLE IF EXISTS Section;
 
 CREATE TABLE Section (
-  id CHAR(100)
-  ,PRIMARY KEY(id)
-  ,title TEXT NOT NULL
-  ,parent CHAR(100)
-  ,FOREIGN KEY (parent) REFERENCES Section(id)
-  ,revisionFlag CHAR(7)
-  ,CHECK(revisionFlag in ('new', 'changed', 'deleted'))
-  ,orderValue INT AUTO_INCREMENT UNIQUE
+   id           VARCHAR(255) PRIMARY KEY
+  ,title        TEXT         NOT NULL
+  ,parent       VARCHAR(255) NULL     REFERENCES Section(id)
+  ,revisionFlag CHAR(7)      NULL
+  ,orderValue   INT          NOT NULL GENERATED ALWAYS AS IDENTITY UNIQUE
+
+  ,CHECK (revisionFlag in ('new', 'changed', 'deleted'))
 );
 
 CREATE TABLE Para (
-   section CHAR(100) NOT NULL
-  ,FOREIGN KEY (section) REFERENCES Section(id)
-  ,para LONGTEXT
-  ,revisionFlag CHAR(7)
-  ,CHECK(revisionFlag in ('new', 'changed', 'deleted'))
-  ,orderValue INT AUTO_INCREMENT UNIQUE
+   section VARCHAR(100) NOT NULL REFERENCES Section
+  ,para TEXT            NOT NULL
+  ,revisionFlag CHAR(7) NULL
+  ,orderValue INT       NOT NULL GENERATED ALWAYS AS IDENTITY UNIQUE
+  ,CHECK ( revisionFlag in ('new', 'changed', 'deleted'))
 );
 
-
 INSERT INTO  Section (id, title, parent, revisionFlag) VALUES ('categories', 'XML Document categories', NULL,        'new');
 INSERT INTO  Section (id, title, parent, revisionFlag) VALUES ('wellFormed', 'Well-formed documents',   'categories', NULL);
 INSERT INTO  Section (id, title, parent, revisionFlag) VALUES ('valid',      'Valid documents',         'categories', NULL);
 INSERT INTO  Section (id, title, parent, revisionFlag) VALUES ('api',        'Available APIs',          NULL,         'deleted');
 
-
 INSERT INTO  Para (section, para, revisionFlag) VALUES
-  ('categories', 'Documents belonging to this category do not adhere to any schema.','changed');
+('categories', 'Documents belonging to this category do not adhere to any schema.','changed');
 
 INSERT INTO  Para  (section, para, revisionFlag) VALUES
-  ('valid',      'Valid documents require a schema.',                                 NULL);
+('valid',      'Valid documents require a schema.',                                 'changed');
 
 INSERT INTO  Para  (section, para, revisionFlag) VALUES
-  ('valid',      'Common standards are DTD, XML Schema and Relax-NG.',                NULL);
+('valid',      'Common standards are DTD, XML Schema and Relax-NG.',                NULL);
 
 INSERT INTO  Para (section, para, revisionFlag)  VALUES
-  ('api',        'We introduce SAX and DOM here.',                                    NULL);
+('api',        'We introduce SAX and DOM here.',                                    NULL);
 
 INSERT INTO  Para  (section, para, revisionFlag) VALUES
-  ('api',        'Some APIs offer multiple language bindings.',                       NULL);
+('api',        'Some APIs offer multiple language bindings.',                       NULL);
 
 SELECT * FROM Section;
 SELECT * FROM Para;
\ No newline at end of file
diff --git a/Klausuren/Sda1/2018Winter/Solve/pom.xml b/Klausuren/Sda1/2018Winter/Solve/pom.xml
index 1aad76638..0e23d4cad 100644
--- a/Klausuren/Sda1/2018Winter/Solve/pom.xml
+++ b/Klausuren/Sda1/2018Winter/Solve/pom.xml
@@ -56,9 +56,9 @@
     </dependency>
 
     <dependency>
-      <groupId>mysql</groupId>
-      <artifactId>mysql-connector-java</artifactId>
-      <version>6.0.6</version>
+      <groupId>postgresql</groupId>
+      <artifactId>postgresql</artifactId>
+      <version>9.1-901-1.jdbc4</version>
     </dependency>
 
     <dependency>
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 7705bde1b..0ecf22167 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
@@ -21,7 +21,7 @@ public class Book2Rdbms implements AutoCloseable {
   public Book2Rdbms() {
     try {
       conn = DriverManager.getConnection(
-          "jdbc:mysql://localhost/hdm?serverTimezone=UTC", "hdmuser", "XYZ");
+          "jdbc:postgresql://localhost/hdm", "hdmuser", "XYZ");
       insertSection = conn.prepareStatement(
           "INSERT INTO  Section (id, title, parent, revisionFlag) VALUES (?, ?, ?, ?);");
 
@@ -69,6 +69,7 @@ public class Book2Rdbms implements AutoCloseable {
               insertPara.setString(3, p.getAttributeValue("revisionflag"));
               insertPara.execute();
             } catch (final SQLException e) {
+              e.printStackTrace();
               System.err.println("Unable to insert <para>: " + e);
               System.exit(1);
             }
diff --git a/Klausuren/Sda1/2018Winter/Solve/src/main/java/Driver.java b/Klausuren/Sda1/2018Winter/Solve/src/main/java/de/hdm_stuttgart/mi/sda1/Driver.java
similarity index 79%
rename from Klausuren/Sda1/2018Winter/Solve/src/main/java/Driver.java
rename to Klausuren/Sda1/2018Winter/Solve/src/main/java/de/hdm_stuttgart/mi/sda1/Driver.java
index ed7f34ded..5d57ee1b6 100644
--- a/Klausuren/Sda1/2018Winter/Solve/src/main/java/Driver.java
+++ b/Klausuren/Sda1/2018Winter/Solve/src/main/java/de/hdm_stuttgart/mi/sda1/Driver.java
@@ -1,4 +1,4 @@
-import de.hdm_stuttgart.mi.sda1.Book2Rdbms;
+package de.hdm_stuttgart.mi.sda1;
 
 public class Driver {
 
-- 
GitLab