Nachlese: Java und SQL | Print |
Written by Marc Buengener   
Saturday, 25 January 2014 12:06

Das Video ist online!

Der heutige Abend startete mit unserer traditionellen Verlosung und der Vorstellung unseres neuen Silber-Sponsoren X;O.

Mehr als 100 interessierte Besucher begrüßten Lukas Eder zu seinem Vortrag über jOOQ. Seine Mission ist es, SQL sexy zu machen.

Als Motivation stellte Lukas die Entstehung der Zusammenarbeit von Java und SQL dar.

  • Die Mühsamkeit und Fehleranfälligkeit der Nutzung von JDBC zeigte die Suche nach 6 Bugs in einem vorbereiteten verzwickten Quelltext.
  • EJB 2.0 Entity Beans ermöglichen zwar die Abstraktion von SQL, sodaß kein SQL-Code mehr erforderlich ist, doch die Konfiguration ist umständlich. Copy und Paste komplexer Konfigurationsdateien begünstigen zusätzliche Fehler.
  • Lukas lobte Hibernate für die gute Idee, Daten nur über Getter und Setter - ohne SQL - zu manipulieren. Doch er führt an, dass es drei Wahrheiten über die Geschäftsdaten gibt. Die wahren Daten in der Datenbank, die wahren Daten in den Java-Objekten und die Wahrheit des Mappings in Hibernate. Die Herausforderung liegt in der Synchronisierung dieser Wahrheiten.
  • Auf weniger Verständnis stieß die Annotatiomania von JPA und EJB 3.0 zu dem der eigentliche Standard ausufert.
Das deklarative Programmieren einer an sich schon deklarativen Sprache, nämlich SQL, stört. Eigentlich möchten wir einfach nur SQL schreiben. Nach dem Trend NoSQL möchte Lukas den Trend No, SQL! fördern. Prominente Vertreter dieser Bewegung sind Google und Apache hadoop.

Lukas hielt seinen weiteren Vortrag in Form einer Codingsession von jOOQ. In einer bestehenden Filmdatenbank-Anwendung implementierten wir weitere SQL-Anfragen. Fragen aus der täglichen Praxis der anwesenden Besucher machten seinen Vortrag interaktiv und sehr lebendig.

Zur Verdeutlichung, dass überraschend viel mit einfachem SQL möglich ist, stellte Lukas die SQL-Fensterfunktion vor. Durch sie werden subqueries vermieden. Die Fensterfunktion war den meisten der Anwesenden unbekannt, obwohl sie Teil des 2003er-Standards ist. Als ebenfalls kaum bekanntes SQL-Feature wurden row-value expressions gezeigt. Weitere Fragen ließen uns alle viel über SQL lernen und machten Lust auf noch mehr. jOOQ bietet uns die Möglichkeit mehr SQL in Java zu verwenden.

jOOQ ist eine domänenspezifische Sprache, implementiert in Java. Sie wirkt als Adapter zwischen Java und SQL. Mit jOOQ kann direkt auf die Datenbank zugegriffen werden. Komfortabler ist jedoch die Nutzung von Java-Klassen für die Datenbanktabellen, die durch einen Codegenerator erstellt werden können. Diese Klassen beinhalten neben den Attributen und Typinformationen auch die Metadaten des Data-Dictionary der Datenbank.

Bei der Formulierung der SQL-statements sind auch die Metadaten nutzbar und werden mittels Autocomplete angeboten. Bereits zur Entwicklungszeit werden die statements auf Typsicherheit geprüft.

Eine Änderung der Datenbankstruktur erfordert lediglich das erneute Starten des Codegenerators. Die Möglichkeiten der Data Definition Language werden zur Zeit von jOOQ nicht abgebildet. Temporäre Tabellen können erstellt werden.

Die Grundidee von jOOQ ist die Verwirklichung einer Database-First-Architektur. Die Daten sind das Fundament, auf dem die Applikation aufbaut. Diesem Ansatz liegt die Erfahrung zugrunde, dass sich die Applikation häufiger ändert, als die durch sie verwalteten Daten. jOOQ verfolgt also einen datenbankorientierten Ansatz und orientiert sich dabei an SQL-Standards. So kann jOOQ auch SQL-Features emulieren, die durch die Datenbank nicht unterstützt werden. Als Beispiel nannte Lukas hier den Zugriff auf die Spaltennamen und deren gleichzeitige Umbenennung während der Verwendung eines Cursors auf einer Oracle-Datenbank.

Cursor werden durch ein lazy fetching in jOOQ ermöglicht, denn grundsätzlich übernimmt jOOQ alle durch die Datenbank gelieferten Daten in den Speicher.

Neben den java-Klassen für Datenbanktabellen werden durch den jOOQ-Codegenerator auch Records mit Gettern und Settern erstellt. Durch sie können Datensätze auf dem Record geändert werden und in der Datenbank gespeichert werden.

Die Vortragszeit verging, wie im Fluge. Weitere Fragen wurden in der persönlichen Runde beim Bier geklärt.

jOOQ ist OpenSource für OpenSource-Datenbanken. Für die Anbindung an kommerzielle Datenbanken ist auch jOOQ kommerziell. jooq.org/download

Wir bedanken uns bei Lukas für seinen interessanten und wieder Freude an SQL weckenden Vortrag.