Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
de:modul:ffit:3-jahr:java:learningunits:lu02:main [2025/08/26 11:16] – [I/O] apeter | de:modul:ffit:3-jahr:java:learningunits:lu02:main [2025/08/29 12:24] (aktuell) – apeter | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
- | ====== LU02a - Funktionale Implementationen 1 ====== | + | ====== LU02a - Konsoleneingabe |
==== Main-Methode ==== | ==== Main-Methode ==== | ||
Zeile 38: | Zeile 38: | ||
git checkout main | git checkout main | ||
</ | </ | ||
- | |||
- | |||
- | ==== Objekte ==== | ||
- | |||
- | **Anforderung 2**: Eine Bibliotheksapplikation soll die vorhanden Bücher mit dem Befehl '' | ||
- | |||
- | Dazu braucht es erstmal eine Klasse '' | ||
- | |||
- | ^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: | ||
- | <code java> | ||
- | private static final Book BOOK_1 = new Book(...); | ||
- | </ | ||
- | |||
- | Machen Sie einen Cherry-Pick des Commits '' | ||
- | |||
- | ==== 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. | ||
- | |||
- | <code bash> | ||
- | psql -U localuser -d localdb | ||
- | </ | ||
- | |||
- | <code sql> | ||
- | 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 | ||
- | ); | ||
- | </ | ||
- | |||
- | <code sql> | ||
- | INSERT INTO books (isbn, title, author, publication_year) | ||
- | VALUES | ||
- | (' | ||
- | (' | ||
- | </ | ||
- | |||
- | Mit '' | ||
- | <code sql> | ||
- | \quit | ||
- | </ | ||
- | |||
- | |||
- | Für den Zugang zu einer Datenbank verwenden wir JDBC (Java Data-Base Connectivity). | ||
- | * https:// | ||
- | |||
- | Anstatt der Maven-Dependency muss die Dependency in '' | ||
- | |||
- | <code gradle> | ||
- | dependencies { | ||
- | // dependencies for the application | ||
- | implementation ' | ||
- | |||
- | // dependencies for testing | ||
- | testImplementation ' | ||
- | } | ||
- | </ | ||
- | |||
- | 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 ('' | ||
- | |||
- | <code sql> | ||
- | SELECT id, isbn, title, author, publication_year FROM books | ||
- | </ | ||
- | |||
- | Führen Sie die Tests aus und korrigieren Sie ihre Implementation falls nötig. | ||
- | |||
- | ==== Konfigurationsvariabeln ==== | ||
- | URLs, Benutzernamen und Passwörter sollten nicht hartcodiert werden, da sonst jeder mit Read-Rechten die Zugangsdaten lesen und somit auf die Datenbank zugreifen kann. | ||
- | |||
- | Es gibt verschiedene Arten, um solche Variabeln einzulesen, wie zum Beispiel: Command-line Argumente, System Properties, eine '' | ||
- | |||
- | Für native Java eignet sich '' | ||
- | * https:// | ||
- | |||
- | - Erstellen Sie die Datei '' | ||
- | - Initialisieren Sie ein '' | ||
- | - Laden Sie die Datei aus dem Root-Verzeichnis: | ||
- | - Holen Sie die Werte der Konfigurationen von '' | ||
- | |||
- | '' | ||
- | |||
- | Führen Sie die Tests erneut aus und korrigieren Sie ihre Implementation falls nötig. | ||
- | |||
- | Für die Pipeline wird eine separate Testdatenbank benötigt. Studieren Sie die Ergänzungen der Pipeline und die beiden SQL-Dateien, | ||
- | |||
- | ==== I/O ==== | ||
- | |||
- | Stellen Sie sich vor, dass die Betreiber einer Bibliothek bisher eine Excel-Datei für die Verwaltung der Bücher genutzt haben 😉. | ||
- | |||
- | Anstatt alle darin enthaltenen Bücher abzutippen und manuell in die Datenbank einzutragen, | ||
- | |||
- | **Anforderung 3**: Mit dem Befehl '' | ||
- | |||
- | - Erweitern Sie die Befehlslogik, | ||
- | - Schreiben Sie die Logik, um die Datei ohne zusätzliche Dependencies einzulesen und eine '' | ||
- | - Speichern Sie die resultierende Liste in die Datenbank. Einträge mit derselben '' | ||
- | - Importieren Sie die Datei '' | ||
- | - Überprüfen Sie die Anforderung mit den Tests im Commit '' | ||
- | |||
- | ==== Weitere Anpassungen (optional) ==== | ||
- | **Change request 2.1**: Damit '' | ||
- | |||