====== LU02b - Datenbankanbindung ======
==== Objekte ====
**Anforderung 2**: Eine Bibliotheksapplikation soll die vorhanden Bücher mit dem Befehl ''listBooks'' auflisten können.
Dazu braucht es erstmal eine Klasse ''Book''. Erstellen Sie die Klasse und die folgenden beiden Objekte als Konstanten. Beim Befehl ''listBooks'' sollen diese beiden Bücher je ein Buch(mindestens der Titel) pro Zeile ausgegeben werden.
^id ^isbn ^title ^author ^year |
|1|978-3-8362-9544-4|Java ist auch eine Insel|Christian Ullenboom|2023|
|2|978-3-658-43573-8|Grundkurs Java|Dietmar Abts|2024|
Zur Erinnerung wie eine Konstante aufgebaut ist:
private static final Book BOOK_1 = new Book(...);
Machen Sie einen Cherry-Pick des Commits ''1766cfc'', um die Tests für diesen Implementationsschritt zu erhalten. Führen Sie die Tests aus und korrigieren Sie ihre Implementation falls nötig.
==== Persistierung ====
Anstatt die Bücher nur hardcodiert in der Applikation zu haben, soll die PostgreSQL-Datenbank verwendet werden.
Loggen Sie sich mit folgendem Befehl bei der Datenbank an und setzen Sie nachfolgende SQL-Statements ab, um einige Beispieleinträge zu erfassen.
psql -U localuser -d localdb
CREATE TABLE books (
id SERIAL PRIMARY KEY,
isbn VARCHAR(20) NOT NULL,
title VARCHAR(255) NOT NULL,
author VARCHAR(255) NOT NULL,
publication_year INT
);
INSERT INTO books (isbn, title, author, publication_year)
VALUES
('978-0134685991', 'Effective Java', 'Joshua Bloch', 2018),
('978-0596009205', 'Head First Java', 'Kathy Sierra, Bert Bates', 2005);
Mit ''\quit'' können Sie sich übrigens wieder von PostgreSQL abmelden.
\quit
Für den Zugang zu einer Datenbank verwenden wir JDBC (Java Data-Base Connectivity).
* https://www.baeldung.com/java-jdbc
Anstatt der Maven-Dependency muss die Dependency in ''build.gradle'' eingetragen werden. Sie erhalten automatisch die nachfolgende Liste, wenn Sie den Commits ''23e74a3'' cherry-picken.
dependencies {
// dependencies for the application
implementation 'org.postgresql:postgresql:42.7.3'
// dependencies for testing
testImplementation 'org.junit.jupiter:junit-jupiter:5.10.2'
}
Implementieren Sie eine Methode, die eine Datenbankverbindung aufbaut, folgende Abfrage macht und für jeden zurückgelieferten Eintrag ein Book-Objekt erstellt. Die Methode soll dann eine Liste (''java.util.List'') der Buch-Objekte zurückgeben.
SELECT id, isbn, title, author, publication_year FROM books
Führen Sie die Tests aus und korrigieren Sie ihre Implementation falls nötig.