From 6f83794dd07c0853d20c5a1be7fec3ce0e17b769 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sch=C3=BCrch=20Michel=20Sven=20=28IT-PTR-CEN1-BDE25=29?= Date: Wed, 4 Mar 2026 15:36:30 +0100 Subject: [PATCH 01/18] refactored JDBC --- content/2025/about/latest-changes/_index.md | 478 ------------------ .../database/01_setup/_index.md | 0 .../database/01_setup/images/connection.png | Bin .../database/01_setup/images/db-auswahl.png | Bin .../database/01_setup/images/ende.png | Bin .../01_setup/images/neue-verbindung.png | Bin .../database/01_setup/images/sql-editor.png | Bin .../database/02_sql_syntax/_index.md | 0 .../database/02_sql_syntax/images/zoo-erd.png | Bin .../database/_index.md | 0 .../L\303\266sung Onlineshop ERD.drawio" | 0 .../L\303\266sung Onlineshop ERD.png" | Bin .../solutions/Solution_SQL_Murder_Mystery.txt | 0 .../01_Database_Introduction}/_index.md | 0 .../begriffe-relationaler-datenbanken.png | Bin .../images/beispiel-bank.drawio | 0 .../images/beispiel-bank.png | Bin .../images/nosql-databases.jpg | Bin .../11_java-jdbc/02_sql-basics}/_index.md | 200 +------- .../02_sql-basics}/images/full-join.png | Bin .../02_sql-basics}/images/inner-join.png | Bin .../02_sql-basics}/images/left-join.png | Bin .../02_sql-basics}/images/right-join.png | Bin .../11_java-jdbc}/03_constraints/_index.md | 0 .../02_java/11_java-jdbc/04_jdbc/_index.md | 218 ++++++++ .../images/close_statement_and_connection.png | Bin .../images/connection_configuration.png | Bin .../images/connection_creation.png | Bin .../images/create_table_query.png | Bin .../{ => 04_jdbc}/images/dependency.png | Bin .../images/driver_registration.png | Bin .../{ => 04_jdbc}/images/jdbc-architektur.png | Bin .../images/prepared_statement.png | Bin .../images/query_with_placeholder.png | Bin .../images/resultset_iteration.png | Bin .../images/select_query_no_params.png | Bin .../images/statement_exectution.png | Bin .../05_datenbank-design}/_index.md | 9 +- .../images/buch-erd.drawio | 0 .../05_datenbank-design}/images/buch-erd.png | Bin .../2025/docs/02_java/11_java-jdbc/_index.md | 215 +------- .../2025/docs/99_shared/database/_index.md | 12 - 42 files changed, 236 insertions(+), 896 deletions(-) delete mode 100644 content/2025/about/latest-changes/_index.md rename content/2025/{labs/99_shared => challenges}/database/01_setup/_index.md (100%) rename content/2025/{labs/99_shared => challenges}/database/01_setup/images/connection.png (100%) rename content/2025/{labs/99_shared => challenges}/database/01_setup/images/db-auswahl.png (100%) rename content/2025/{labs/99_shared => challenges}/database/01_setup/images/ende.png (100%) rename content/2025/{labs/99_shared => challenges}/database/01_setup/images/neue-verbindung.png (100%) rename content/2025/{labs/99_shared => challenges}/database/01_setup/images/sql-editor.png (100%) rename content/2025/{labs/99_shared => challenges}/database/02_sql_syntax/_index.md (100%) rename content/2025/{labs/99_shared => challenges}/database/02_sql_syntax/images/zoo-erd.png (100%) rename content/2025/{labs/99_shared => challenges}/database/_index.md (100%) rename "content/2025/labs/99_shared/database/solutions/L\303\266sung Onlineshop ERD.drawio" => "content/2025/challenges/database/solutions/L\303\266sung Onlineshop ERD.drawio" (100%) rename "content/2025/labs/99_shared/database/solutions/L\303\266sung Onlineshop ERD.png" => "content/2025/challenges/database/solutions/L\303\266sung Onlineshop ERD.png" (100%) rename content/2025/{labs/99_shared => challenges}/database/solutions/Solution_SQL_Murder_Mystery.txt (100%) rename content/2025/docs/{99_shared/database/01_db-erklaert => 02_java/11_java-jdbc/01_Database_Introduction}/_index.md (100%) rename content/2025/docs/{99_shared/database/01_db-erklaert => 02_java/11_java-jdbc/01_Database_Introduction}/images/begriffe-relationaler-datenbanken.png (100%) rename content/2025/docs/{99_shared/database/01_db-erklaert => 02_java/11_java-jdbc/01_Database_Introduction}/images/beispiel-bank.drawio (100%) rename content/2025/docs/{99_shared/database/01_db-erklaert => 02_java/11_java-jdbc/01_Database_Introduction}/images/beispiel-bank.png (100%) rename content/2025/docs/{99_shared/database/01_db-erklaert => 02_java/11_java-jdbc/01_Database_Introduction}/images/nosql-databases.jpg (100%) rename content/2025/docs/{99_shared/database/02_sql-syntax => 02_java/11_java-jdbc/02_sql-basics}/_index.md (75%) rename content/2025/docs/{99_shared/database/02_sql-syntax => 02_java/11_java-jdbc/02_sql-basics}/images/full-join.png (100%) rename content/2025/docs/{99_shared/database/02_sql-syntax => 02_java/11_java-jdbc/02_sql-basics}/images/inner-join.png (100%) rename content/2025/docs/{99_shared/database/02_sql-syntax => 02_java/11_java-jdbc/02_sql-basics}/images/left-join.png (100%) rename content/2025/docs/{99_shared/database/02_sql-syntax => 02_java/11_java-jdbc/02_sql-basics}/images/right-join.png (100%) rename content/2025/docs/{99_shared/database => 02_java/11_java-jdbc}/03_constraints/_index.md (100%) create mode 100644 content/2025/docs/02_java/11_java-jdbc/04_jdbc/_index.md rename content/2025/docs/02_java/11_java-jdbc/{ => 04_jdbc}/images/close_statement_and_connection.png (100%) rename content/2025/docs/02_java/11_java-jdbc/{ => 04_jdbc}/images/connection_configuration.png (100%) rename content/2025/docs/02_java/11_java-jdbc/{ => 04_jdbc}/images/connection_creation.png (100%) rename content/2025/docs/02_java/11_java-jdbc/{ => 04_jdbc}/images/create_table_query.png (100%) rename content/2025/docs/02_java/11_java-jdbc/{ => 04_jdbc}/images/dependency.png (100%) rename content/2025/docs/02_java/11_java-jdbc/{ => 04_jdbc}/images/driver_registration.png (100%) rename content/2025/docs/02_java/11_java-jdbc/{ => 04_jdbc}/images/jdbc-architektur.png (100%) rename content/2025/docs/02_java/11_java-jdbc/{ => 04_jdbc}/images/prepared_statement.png (100%) rename content/2025/docs/02_java/11_java-jdbc/{ => 04_jdbc}/images/query_with_placeholder.png (100%) rename content/2025/docs/02_java/11_java-jdbc/{ => 04_jdbc}/images/resultset_iteration.png (100%) rename content/2025/docs/02_java/11_java-jdbc/{ => 04_jdbc}/images/select_query_no_params.png (100%) rename content/2025/docs/02_java/11_java-jdbc/{ => 04_jdbc}/images/statement_exectution.png (100%) rename content/2025/docs/{99_shared/database/04_datenbank-design => 02_java/11_java-jdbc/05_datenbank-design}/_index.md (97%) rename content/2025/docs/{99_shared/database/04_datenbank-design => 02_java/11_java-jdbc/05_datenbank-design}/images/buch-erd.drawio (100%) rename content/2025/docs/{99_shared/database/04_datenbank-design => 02_java/11_java-jdbc/05_datenbank-design}/images/buch-erd.png (100%) delete mode 100644 content/2025/docs/99_shared/database/_index.md diff --git a/content/2025/about/latest-changes/_index.md b/content/2025/about/latest-changes/_index.md deleted file mode 100644 index 1d0a70d7bd..0000000000 --- a/content/2025/about/latest-changes/_index.md +++ /dev/null @@ -1,478 +0,0 @@ ---- -title: "Latest Changes" -linkTitle: "Latest Changes" -type: docs -weight: 9999 -description: > - Übersicht der Änderungen für 2025 (Release Notes und Seitenänderungen). ---- - -## 20251209-0936-146 - -_2025-12-09 09:36 CET auf origin/master_ - -### Seiten-Änderungen - -- **Geändert** - - [Challenges / Java Challenges / java-ood / Objektorientiertes Design Challenge - Vehicles](../../challenges/java/java-ood/02_Vehicles/) - - [Exams / Java Exams / Java OOD Exams / Rollenspiel](../../exams/02_java/07_java-ood/01_rollenspiel/) - ---- - -## 20251202-1342-145 - -_2025-12-02 13:42 CET auf origin/master_ - -### Seiten-Änderungen - -- **Hinzugefügt** - - [Docs / Übergreifend / Kollaboration & Versionskontrolle / Source Repositories / Git / Git Workflow im Ausbildungsprogramm](../../docs/99_shared/collaboration/source-repositories/git/03_workflow/) -- **Geändert** - - [Docs / Übergreifend / Kollaboration & Versionskontrolle / Source Repositories / Git / Git Grundwissen](../../docs/99_shared/collaboration/source-repositories/git/01_grundwissen/) - - [Docs / Übergreifend / Kollaboration & Versionskontrolle / Source Repositories / Git / Git Vertiefung](../../docs/99_shared/collaboration/source-repositories/git/02_vertiefung/) - ---- - -## 20251126-0907-144 - -_2025-11-26 09:07 CET auf origin/master_ - -### Seiten-Änderungen - -- **Geändert** - - [Docs / Backend (Java) / Spring Framework / Projekt Erstellen](../../docs/02_java/12_spring-framework/08_projekt-erstellen/) - - [Docs / Übergreifend / Datenbanken / Constraints](../../docs/99_shared/database/03_constraints/) - - [Labs / Java Labs / Java Exercises - Maven / Maven - Aufgaben](../../labs/02_java/05_maven/01_Exercises/) - ---- - -## 20251125-1135-143 - -_2025-11-25 11:35 CET auf origin/master_ - -### Seiten-Änderungen - -- **Hinzugefügt** - - [Labs / Tools Exercises](../../labs/99_Tools/) - - [Labs / Tools Exercises / Java Exercises - Grundlagen / Geheimnisse in Java sicher aufbewahren / Secrets - Geheimnisse sicher hinterlegen](../../labs/99_Tools/java/05_secrets/01_SimpleExample/) - - [Labs / Tools Exercises / Java Exercises - Grundlagen / Geheimnisse in Java sicher aufbewahren / Secrets - Geheimnisse sicher hinterlegen / SimpleExample - Source](../../labs/99_Tools/java/05_secrets/01_SimpleExample/source/) - - [Labs / Tools Exercises / Java Exercises - Grundlagen / Geheimnisse in Java sicher aufbewahren](../../labs/99_Tools/java/05_secrets/) - - [Labs / Tools Exercises / Java Exercises - Grundlagen](../../labs/99_Tools/java/) -- **Geändert** - - [Docs / Backend (Java) / Java Grundlagen / Methoden](../../docs/02_java/03_java-grundlagen/08_methods/) - - [Docs / Backend (Java) / Objektorientierte Programmierung in Java / Objektorientierte Programmierung](../../docs/02_java/04_java-oop/01_oop/) - - [Docs / Backend (Java) / Objektorientierte Programmierung in Java / Java Lists Basics](../../docs/02_java/04_java-oop/05_list-basics/) - - [Docs / Backend (Java) / Objektorientierte Programmierung in Java / Instanzmethoden](../../docs/02_java/04_java-oop/08_methods/) - - [Exams / Java Exams / Java Grundlagen Exams / Exam Java Grundlagen - Zahlen-Array](../../exams/02_java/03_java-grundlagen/01_exam1/) - - [Exams / Java Exams / Java Grundlagen Exams / Exam Java Grundlagen - Strings](../../exams/02_java/03_java-grundlagen/02_exam2/) - - [Labs / Java Labs / Java Exercises - Grundlagen / Java Exercises - Einfaches Hello World](../../labs/02_java/03_java-grundlagen/00_simple-hello-world/) - - [Labs / Java Labs / Java Exercises - Grundlagen / Java Exercises - Ausgabe auf die Kommandozeile](../../labs/02_java/03_java-grundlagen/01_console/) - - [Labs / Java Labs / Java Exercises - Grundlagen / Java Exercises - Variablen und primitive Datentypen](../../labs/02_java/03_java-grundlagen/04_variables-and-types/) - - [Labs / Java Labs / Java Exercises - Grundlagen / Java Exercises - Einfache Berechnungen](../../labs/02_java/03_java-grundlagen/05_logic/) - - [Labs / Java Labs / Java Exercises - Grundlagen / Java Exercises - Variablen und bedingte Anweisungen](../../labs/02_java/03_java-grundlagen/06_control-structures-if/) - - [Labs / Java Labs / Java Exercises - Grundlagen / Java Exercises - Loops](../../labs/02_java/03_java-grundlagen/06_control-structures-loops/) - - [Labs / Java Labs / Java Exercises - Grundlagen / Java Exercises - Das Switch Statement](../../labs/02_java/03_java-grundlagen/06_control-structures-switch/) - - [Labs / Java Labs / Java Exercises - Grundlagen / Java Exercises - Methoden](../../labs/02_java/03_java-grundlagen/08_methods/) - - [Labs / Java Labs / Java Exercises - Grundlagen / Java Exercises - Methoden / methods - Source](../../labs/02_java/03_java-grundlagen/08_methods/source/) - - [Labs / Java Labs / Java Exercises - Grundlagen / Java Exercises - Exception Handling](../../labs/02_java/03_java-grundlagen/09_exception_handling/) - - [Labs / Java Labs / Java Exercises - Grundlagen / Java Exercises - Debugging](../../labs/02_java/03_java-grundlagen/10_debugging/) - - [Labs / Java Labs / Java Exercises - Grundlagen / Java Exercises - Packages](../../labs/02_java/03_java-grundlagen/12_packages/) - - [Labs / Java Labs / Java Exercises - Grundlagen / Java Exercises - Strings](../../labs/02_java/03_java-grundlagen/13_strings/) - - [Labs / Java Labs / Java Exercises - Grundlagen / Java Exercises - Regex](../../labs/02_java/03_java-grundlagen/16_regex/) - - [Labs / Java Labs / Java Exercises - Grundlagen / Java Exercises - Regex / regex - Source](../../labs/02_java/03_java-grundlagen/16_regex/source/) - ---- - -## 20251120-1211-142 - -_2025-11-20 12:11 CET auf origin/master_ - -### Seiten-Änderungen - -- **Geändert** - - [Challenges / Java Challenges / java-oop / Hogwarts Sorting Hat Challenge](../../challenges/java/java-oop/Hogwarts/) - - [Challenges / Java Challenges / java-oop / Wassermenge Challenge](../../challenges/java/java-oop/Wassermenge/) -- **Gelöscht** - - Labs / Java Labs / Java Exercises - OOP / 20_Patienten - - Labs / Java Labs / Java Exercises - OOP / 22_Streaming_Dienst - ---- - -## 20251118-0925-141 - -_2025-11-18 09:25 CET auf origin/master_ - -### Seiten-Änderungen - -- **Geändert** - - [Challenges / Java Challenges / java-ood / Objektorientiertes Design Challange - Vehicles](../../challenges/java/java-ood/02_Vehicles/) -- **Gelöscht** - - Labs / Java Labs / Java Exercises - OOD / 01_Bibliothek - ---- - -## 20251112-1410-140 - -_2025-11-12 14:10 CET auf origin/master_ - -### Seiten-Änderungen - -- **Geändert** - - [Docs / Backend (Java) / Objektorientiertes Design](../../docs/02_java/07_java-ood/) - - [Docs / Frontend (Web) / TypeScript / Einführung in TypeScript](../../docs/03_frontend/05_typescript/01_intro-typescript/) - ---- - -## 20251028-1409-139 - -_2025-10-28 14:09 CET auf origin/master_ - -### Seiten-Änderungen - -- **Geändert** - - [Docs / Frontend (Web) / TypeScript / Einführung in TypeScript](../../docs/03_frontend/05_typescript/01_intro-typescript/) - - [Docs / Frontend (Web) / Angular / Components](../../docs/03_frontend/06_angular/02_3_components/) - ---- - -## 20251021-1439-138 - -_2025-10-21 14:39 CEST auf origin/master_ - -### Seiten-Änderungen - -- **Hinzugefügt** - - [Labs / Java Labs / Java Exercises - OOP / Wassermenge](../../challenges/java/java-oop/Wassermenge/) -- **Geändert** - - [Docs / Backend (Java) / Objektorientierte Programmierung in Java / Java Lists Basics](../../docs/02_java/04_java-oop/05_list-basics/) - - [Docs / Backend (Java) / Objektorientierte Programmierung in Java / Statische und nicht-statische Elemente](../../docs/02_java/04_java-oop/10_static-non_static/) - - [Docs / Backend (Java) / Objektorientierte Programmierung in Java / Java Generics Grundlagen](../../docs/02_java/04_java-oop/11_java-generics/) - - [Labs / Java Labs / Java Exercises - OOP / Listen](../../labs/02_java/04_java-oop/05_lists/) - - [Labs / Java Labs / Java Exercises - OOP / NinjaCups](../../labs/02_java/04_java-oop/10_NinjaCups/) - - [Labs / Java Labs / Java Exercises - OOP / Generics](../../labs/02_java/04_java-oop/11_Generics/) - - [Labs / Java Labs / Java Exercises - OOP / Adressbuch](../../labs/02_java/04_java-oop/21_Adressbuch/) - - [Labs / Java Labs / Java Exercises - OOP / Immobilienfirma](../../labs/02_java/04_java-oop/23_ImmoFirma/) - - [Labs / Java Labs / Java Exercises - OOP](../../labs/02_java/04_java-oop/) -- **Gelöscht** - - Labs / Java Labs / Java Exercises - OOP / 06_Wassermenge - ---- - -## 20250923-1333-136 - -_2025-09-23 13:33 CEST auf origin/master_ - -### Seiten-Änderungen - -- **Geändert** - - [Docs / Übergreifend / Entwicklungsumgebungen - IDE / IntelliJ IDEA – dein Einstieg ins professionelle Programmieren / Git mit IntelliJ nutzen](../../docs/99_shared/ide/intellij/04_git/) - ---- - -## 20250923-1318-135 - -_2025-09-23 13:18 CEST auf origin/master_ - -### Seiten-Änderungen - -- **Hinzugefügt** - - [Docs / Übergreifend / UML / Einführung UML](../../docs/99_shared/uml/01_basiscs/) - - [Docs / Übergreifend / UML](../../docs/99_shared/uml/) -- **Geändert** - - [Docs / Backend (Java) / Objektorientierte Programmierung in Java / Objektorientierte Programmierung](../../docs/02_java/04_java-oop/01_oop/) - - [Docs / Backend (Java) / Objektorientierte Programmierung in Java / Zugriffsmodifikatoren](../../docs/02_java/04_java-oop/03_access-modifier/) -- **Gelöscht** - - Docs / Backend (Java) / Objektorientierte Programmierung in Java / 02_packages - ---- - -## 20250923-0926-134 - -_2025-09-23 09:26 CEST auf origin/master_ - -### Seiten-Änderungen - -- **Hinzugefügt** - - [Docs / Frontend (Web)](../../docs/03_frontend/) - - [Docs / Landing Pages](../../docs/98_landing/) - - [Docs / Landing Pages / Testing](../../docs/98_landing/testing/) - - [Docs / Übergreifend](../../docs/99_shared/) - - [Labs / Tools / Git Labs / Git Vertiefung Labs](../../labs/99_shared/git/02_vertiefung/) -- **Geändert** - - [Konfiguration](../../config/) - - [Docs / Backend (Java) / Java Grundlagen / Variablen in Java](../../docs/02_java/03_java-grundlagen/02_variables/) - - [Docs / Backend (Java) / Java Grundlagen / Methoden](../../docs/02_java/03_java-grundlagen/08_methods/) - - [Docs / Backend (Java) / Java Grundlagen / Debugging – Fehler finden und verstehen](../../docs/02_java/03_java-grundlagen/10_debugging/) - - [Docs / Backend (Java) / Java Grundlagen / Packages](../../docs/02_java/03_java-grundlagen/12_packages/) - - [Docs / Backend (Java) / Java Grundlagen / Reguläre Ausdrücke in Java (RegEx)](../../docs/02_java/03_java-grundlagen/16_regex/) - - [Docs / Backend (Java) / Java Grundlagen / Module abschliessen](../../docs/02_java/03_java-grundlagen/99_wrap_up/) - - [Docs / Backend (Java) / Java Grundlagen](../../docs/02_java/03_java-grundlagen/) - - [Docs / Backend (Java) / Lombok](../../docs/02_java/06_lombok/) - - [Docs / Backend (Java)](../../docs/02_java/) - - [Docs / Frontend (Web) / Frontend IDE Basics / IDE](../../docs/03_frontend/01_ide-basic/01_ide/) - - [Docs / Frontend (Web) / Frontend IDE Basics](../../docs/03_frontend/01_ide-basic/) - - [Docs / Frontend (Web) / HTML und CSS / HTML](../../docs/03_frontend/02_html_css/01_html-intro/) - - [Docs / Frontend (Web) / HTML und CSS / Erste Seite erstellen](../../docs/03_frontend/02_html_css/02_html-first-code/) - - [Docs / Frontend (Web) / HTML und CSS / Basics zu HTML](../../docs/03_frontend/02_html_css/03_html-basics/) - - [Docs / Frontend (Web) / HTML und CSS / Weitere HTML-Tags](../../docs/03_frontend/02_html_css/04_weitere-tags/) - - [Docs / Frontend (Web) / HTML und CSS / HTML Formulare](../../docs/03_frontend/02_html_css/05_forms/) - - [Docs / Frontend (Web) / HTML und CSS / HTML-Struktur](../../docs/03_frontend/02_html_css/06_html-structure/) - - [Docs / Frontend (Web) / HTML und CSS / HTML5 Semantic Tags](../../docs/03_frontend/02_html_css/07_html-5-semantic-tags/) - - [Docs / Frontend (Web) / HTML und CSS / HTML Rekapitulieren](../../docs/03_frontend/02_html_css/08_html-finish/) - - [Docs / Frontend (Web) / HTML und CSS / CSS](../../docs/03_frontend/02_html_css/09_css-intro/) - - [Docs / Frontend (Web) / HTML und CSS / CSS-Grundlagen](../../docs/03_frontend/02_html_css/10_css-basics/) - - [Docs / Frontend (Web) / HTML und CSS / CSS-Selektoren](../../docs/03_frontend/02_html_css/11_css-selectors/) - - [Docs / Frontend (Web) / HTML und CSS / Schriftarten](../../docs/03_frontend/02_html_css/12_css-fonts/) - - [Docs / Frontend (Web) / HTML und CSS / Farben](../../docs/03_frontend/02_html_css/13_css-colors/) - - [Docs / Frontend (Web) / HTML und CSS / Sizing](../../docs/03_frontend/02_html_css/14_css-sizing/) - - [Docs / Frontend (Web) / HTML und CSS / Layouting](../../docs/03_frontend/02_html_css/15_layouting/) - - [Docs / Frontend (Web) / HTML und CSS / Positionierung](../../docs/03_frontend/02_html_css/16_css-positioning/) - - [Docs / Frontend (Web) / HTML und CSS / Übergänge und Animationen](../../docs/03_frontend/02_html_css/17_css-keyframes/) - - [Docs / Frontend (Web) / HTML und CSS / Bootstrap](../../docs/03_frontend/02_html_css/18_css-bootstrap/) - - [Docs / Frontend (Web) / HTML und CSS / Abschluss](../../docs/03_frontend/02_html_css/19_css-finish/) - - [Docs / Frontend (Web) / HTML und CSS](../../docs/03_frontend/02_html_css/) - - [Docs / Frontend (Web) / JavaScript / JavaScript: Einführung](../../docs/03_frontend/03_javascript/01_intro/) - - [Docs / Frontend (Web) / JavaScript / JavaScript: Konsole](../../docs/03_frontend/03_javascript/02_browser-tools/) - - [Docs / Frontend (Web) / JavaScript / Mit JavaScript das DOM verändern](../../docs/03_frontend/03_javascript/03_dom-manipulation/) - - [Docs / Frontend (Web) / JavaScript / JavaScript trainieren](../../docs/03_frontend/03_javascript/04_training/) - - [Docs / Frontend (Web) / JavaScript / Conditionals](../../docs/03_frontend/03_javascript/05_conditionals/) - - [Docs / Frontend (Web) / JavaScript / Operatoren](../../docs/03_frontend/03_javascript/06_operators/) - - [Docs / Frontend (Web) / JavaScript / Functions](../../docs/03_frontend/03_javascript/07_functions/) - - [Docs / Frontend (Web) / JavaScript / Arrays](../../docs/03_frontend/03_javascript/08_arrays/) - - [Docs / Frontend (Web) / JavaScript / Arrays - Higher Order Functions](../../docs/03_frontend/03_javascript/09_higher-order-functions-arrays/) - - [Docs / Frontend (Web) / JavaScript / Objekte](../../docs/03_frontend/03_javascript/10_objects/) - - [Docs / Frontend (Web) / JavaScript / Loops](../../docs/03_frontend/03_javascript/11_loops/) - - [Docs / Frontend (Web) / JavaScript / Maps](../../docs/03_frontend/03_javascript/12_maps/) - - [Docs / Frontend (Web) / JavaScript / Sets](../../docs/03_frontend/03_javascript/13_sets/) - - [Docs / Frontend (Web) / JavaScript / JSON](../../docs/03_frontend/03_javascript/14_json/) - - [Docs / Frontend (Web) / JavaScript / Web Request](../../docs/03_frontend/03_javascript/15_web_request/) - - [Docs / Frontend (Web) / JavaScript / Promises](../../docs/03_frontend/03_javascript/16_async/) - - [Docs / Frontend (Web) / JavaScript / Timeouts und Intervalle](../../docs/03_frontend/03_javascript/17_timeout-and-interval/) - - [Docs / Frontend (Web) / JavaScript / Prototyping und Klassen](../../docs/03_frontend/03_javascript/18_prototyping-class-in-js/) - - [Docs / Frontend (Web) / JavaScript / ES6: Variablen deklarieren](../../docs/03_frontend/03_javascript/19_variables/) - - [Docs / Frontend (Web) / JavaScript / ES6: Importe](../../docs/03_frontend/03_javascript/20_imports/) - - [Docs / Frontend (Web) / JavaScript / ES6: Optionale Argumente in Methoden und Konstruktoren](../../docs/03_frontend/03_javascript/21_optional-args/) - - [Docs / Frontend (Web) / JavaScript / JSDoc](../../docs/03_frontend/03_javascript/22_jsdoc/) - - [Docs / Frontend (Web) / JavaScript / Advanced console.log(...)'s](../../docs/03_frontend/03_javascript/23_console.logs/) - - [Docs / Frontend (Web) / JavaScript / Debugging](../../docs/03_frontend/03_javascript/24_debugging/) - - [Docs / Frontend (Web) / JavaScript](../../docs/03_frontend/03_javascript/) - - [Docs / Frontend (Web) / Frontend IDE Advanced / Node.js](../../docs/03_frontend/04_ide-advanced/01_nodejs/) - - [Docs / Frontend (Web) / Frontend IDE Advanced / Linter](../../docs/03_frontend/04_ide-advanced/02_linter/) - - [Docs / Frontend (Web) / Frontend IDE Advanced](../../docs/03_frontend/04_ide-advanced/) - - [Docs / Frontend (Web) / TypeScript / Einführung in TypeScript](../../docs/03_frontend/05_typescript/01_intro-typescript/) - - [Docs / Frontend (Web) / TypeScript / Special Typescript Operators](../../docs/03_frontend/05_typescript/02_special-operators/) - - [Docs / Frontend (Web) / TypeScript / tsconfig Datei](../../docs/03_frontend/05_typescript/03_config/) - - [Docs / Frontend (Web) / TypeScript / Projekt aufsetzen in TypeScript](../../docs/03_frontend/05_typescript/04_projekt-aufsetzen/) - - [Docs / Frontend (Web) / TypeScript](../../docs/03_frontend/05_typescript/) - - [Docs / Frontend (Web) / Angular / Javascript Frameworks](../../docs/03_frontend/06_angular/01_1_javascript-frameworks/) - - [Docs / Frontend (Web) / Angular / Services](../../docs/03_frontend/06_angular/02_10_services/) - - [Docs / Frontend (Web) / Angular / Modules](../../docs/03_frontend/06_angular/02_11_angular_modules/) - - [Docs / Frontend (Web) / Angular / Routing](../../docs/03_frontend/06_angular/02_12_angular_routing/) - - [Docs / Frontend (Web) / Angular / Rendering](../../docs/03_frontend/06_angular/02_13_rendering/) - - [Docs / Frontend (Web) / Angular / Lazy Loading](../../docs/03_frontend/06_angular/02_14_lazy_loading/) - - [Docs / Frontend (Web) / Angular / Interceptors](../../docs/03_frontend/06_angular/02_15_interceptors/) - - [Docs / Frontend (Web) / Angular / Error Handling](../../docs/03_frontend/06_angular/02_16_errorhandler/) - - [Docs / Frontend (Web) / Angular / Dependency Injection](../../docs/03_frontend/06_angular/02_17_dependency_injection/) - - [Docs / Frontend (Web) / Angular / Life Cycle Hook](../../docs/03_frontend/06_angular/02_18_life_cycle_hook/) - - [Docs / Frontend (Web) / Angular / Einführung in Angular](../../docs/03_frontend/06_angular/02_1_einfuehrung/) - - [Docs / Frontend (Web) / Angular / Angular Strukturen](../../docs/03_frontend/06_angular/02_2_strukturen/) - - [Docs / Frontend (Web) / Angular / Components](../../docs/03_frontend/06_angular/02_3_components/) - - [Docs / Frontend (Web) / Angular / Standalone Components](../../docs/03_frontend/06_angular/02_4_standalone-components/) - - [Docs / Frontend (Web) / Angular / Templates](../../docs/03_frontend/06_angular/02_5_templates/) - - [Docs / Frontend (Web) / Angular / Stylesheet](../../docs/03_frontend/06_angular/02_6_stylesheet/) - - [Docs / Frontend (Web) / Angular / Testfiles](../../docs/03_frontend/06_angular/02_7_unit-test/) - - [Docs / Frontend (Web) / Angular / Directives](../../docs/03_frontend/06_angular/02_8_directives/) - - [Docs / Frontend (Web) / Angular / Control Flow](../../docs/03_frontend/06_angular/02_9_control-flow/) - - [Docs / Frontend (Web) / Angular / Data Bindings](../../docs/03_frontend/06_angular/03_1_data-binding/) - - [Docs / Frontend (Web) / Angular / Pipes](../../docs/03_frontend/06_angular/03_2_pipes/) - - [Docs / Frontend (Web) / Angular / Decorators](../../docs/03_frontend/06_angular/03_3_decorator/) - - [Docs / Frontend (Web) / Angular / Reactive Forms](../../docs/03_frontend/06_angular/03_4_forms/) - - [Docs / Frontend (Web) / Angular / Internationalization (i18n)](../../docs/03_frontend/06_angular/03_5_internationalization/) - - [Docs / Frontend (Web) / Angular / Angular Material, Responsive Web Design und Accessibility](../../docs/03_frontend/06_angular/04_1_material/) - - [Docs / Frontend (Web) / Angular / Angular Lyne - Custom Components der SBB](../../docs/03_frontend/06_angular/04_2_lyne/) - - [Docs / Frontend (Web) / Angular / RxJS](../../docs/03_frontend/06_angular/05_1_rxjs/) - - [Docs / Frontend (Web) / Angular / RxJS Subjects](../../docs/03_frontend/06_angular/05_2_rxjs-subjects/) - - [Docs / Frontend (Web) / Angular / RxJS Operators](../../docs/03_frontend/06_angular/05_3_rxjs-operators/) - - [Docs / Frontend (Web) / Angular / Signals](../../docs/03_frontend/06_angular/05_4_signals/) - - [Docs / Frontend (Web) / Angular / Json Web Token Authorization (JWT)](../../docs/03_frontend/06_angular/07_1_exkurs-jwt/) - - [Docs / Frontend (Web) / Angular](../../docs/03_frontend/06_angular/) - - [Docs / Frontend (Web) / Angular NgRx (optional) / NgRx](../../docs/03_frontend/07_angular-ngrx/01_ngrx/) - - [Docs / Frontend (Web) / Angular NgRx (optional) / NgRx Actions](../../docs/03_frontend/07_angular-ngrx/02_ngrx_actions/) - - [Docs / Frontend (Web) / Angular NgRx (optional) / NgRx Reducers](../../docs/03_frontend/07_angular-ngrx/03_ngrx-reducers/) - - [Docs / Frontend (Web) / Angular NgRx (optional) / NgRx Selectors](../../docs/03_frontend/07_angular-ngrx/04_ngrx-selectors/) - - [Docs / Frontend (Web) / Angular NgRx (optional) / NgRx angwendet (Erst nach der Durchführung der NgRx-Labs anschauen)](../../docs/03_frontend/07_angular-ngrx/05_ngrx-applied/) - - [Docs / Frontend (Web) / Angular NgRx (optional)](../../docs/03_frontend/07_angular-ngrx/) - - [Docs / Landing Pages / Debugging](../../docs/98_landing/debugging/) - - [Docs / Übergreifend / CI/CD / Continuous Integration](../../docs/99_shared/cicd/01_continuous-integration/) - - [Docs / Übergreifend / CI/CD / Continuous Delivery](../../docs/99_shared/cicd/02_continuous-delivery/) - - [Docs / Übergreifend / CI/CD / Continuous Deployment](../../docs/99_shared/cicd/03_continuous-deployment/) - - [Docs / Übergreifend / CI/CD](../../docs/99_shared/cicd/) - - [Docs / Übergreifend / Kollaboration & Versionskontrolle](../../docs/99_shared/collaboration/) - - [Docs / Übergreifend / Kollaboration & Versionskontrolle / guidelines / coding / Java Coding Guidelines](../../docs/99_shared/collaboration/guidelines/coding/java/) - - [Docs / Übergreifend / Kollaboration & Versionskontrolle / Source Repositories](../../docs/99_shared/collaboration/source-repositories/) - - [Docs / Übergreifend / Kollaboration & Versionskontrolle / Source Repositories / Git / Git Grundwissen / Was ist Git](../../docs/99_shared/collaboration/source-repositories/git/01_grundwissen/01_was-ist-git/) - - [Docs / Übergreifend / Kollaboration & Versionskontrolle / Source Repositories / Git / Git Grundwissen / Install Git](../../docs/99_shared/collaboration/source-repositories/git/01_grundwissen/02_git-install/) - - [Docs / Übergreifend / Kollaboration & Versionskontrolle / Source Repositories / Git / Git Grundwissen / Git Basics](../../docs/99_shared/collaboration/source-repositories/git/01_grundwissen/03_git-basics/) - - [Docs / Übergreifend / Kollaboration & Versionskontrolle / Source Repositories / Git / Git Grundwissen / Git Erweitert](../../docs/99_shared/collaboration/source-repositories/git/01_grundwissen/04_git-erweitert/) - - [Docs / Übergreifend / Kollaboration & Versionskontrolle / Source Repositories / Git / Git Grundwissen / Git Branches](../../docs/99_shared/collaboration/source-repositories/git/01_grundwissen/05_git-branches/) - - [Docs / Übergreifend / Kollaboration & Versionskontrolle / Source Repositories / Git / Git Grundwissen / GitHub](../../docs/99_shared/collaboration/source-repositories/git/01_grundwissen/06_github/) - - [Docs / Übergreifend / Kollaboration & Versionskontrolle / Source Repositories / Git / Git Grundwissen / Bitbucket](../../docs/99_shared/collaboration/source-repositories/git/01_grundwissen/07_bitbucket/) - - [Docs / Übergreifend / Kollaboration & Versionskontrolle / Source Repositories / Git / Git Grundwissen / SSH-Key in Git](../../docs/99_shared/collaboration/source-repositories/git/01_grundwissen/08_git-ssh/) - - [Docs / Übergreifend / Kollaboration & Versionskontrolle / Source Repositories / Git / Git Grundwissen](../../docs/99_shared/collaboration/source-repositories/git/01_grundwissen/) - - [Docs / Übergreifend / Kollaboration & Versionskontrolle / Source Repositories / Git / Git Vertiefung / Voraussetzungen](../../docs/99_shared/collaboration/source-repositories/git/02_vertiefung/01_voraussetzungen/) - - [Docs / Übergreifend / Kollaboration & Versionskontrolle / Source Repositories / Git / Git Vertiefung / Zusammenarbeit im Projekt](../../docs/99_shared/collaboration/source-repositories/git/02_vertiefung/02_zusammenarbeit/) - - [Docs / Übergreifend / Kollaboration & Versionskontrolle / Source Repositories / Git / Git Vertiefung / Mit mehreren Repositories arbeiten](../../docs/99_shared/collaboration/source-repositories/git/02_vertiefung/03_mehrere-repositories/) - - [Docs / Übergreifend / Kollaboration & Versionskontrolle / Source Repositories / Git / Git Vertiefung](../../docs/99_shared/collaboration/source-repositories/git/02_vertiefung/) - - [Docs / Übergreifend / Kollaboration & Versionskontrolle / Source Repositories / Git](../../docs/99_shared/collaboration/source-repositories/git/) - - [Docs / Übergreifend / Kollaboration & Versionskontrolle / Source Repositories / Bitbucket Repository einrichten](../../docs/99_shared/collaboration/source-repositories/personal-bitbucket/) - - [Docs / Übergreifend / Datenbanken / Datenbank 101](../../docs/99_shared/database/01_db-erklaert/) - - [Docs / Übergreifend / Datenbanken / SQL Syntax](../../docs/99_shared/database/02_sql-syntax/) - - [Docs / Übergreifend / Datenbanken / Constraints](../../docs/99_shared/database/03_constraints/) - - [Docs / Übergreifend / Datenbanken / Datenbank Design](../../docs/99_shared/database/04_datenbank-design/) - - [Docs / Übergreifend / Datenbanken](../../docs/99_shared/database/) - - [Docs / Übergreifend / Nützliche Tips, Tricks und Anleitungen](../../docs/99_shared/diverses/) - - [Docs / Übergreifend / Nützliche Tips, Tricks und Anleitungen / Google API Key](../../docs/99_shared/diverses/google-api-key/) - - [Docs / Übergreifend / Nützliche Tips, Tricks und Anleitungen / Reguläre Ausdrücke](../../docs/99_shared/diverses/regex/) - - [Docs / Übergreifend / Dokumentation](../../docs/99_shared/documentation/) - - [Docs / Übergreifend / Dokumentation / Markdown](../../docs/99_shared/documentation/markdown/) - - [Docs / Übergreifend / Dokumentation / Microsoft Word](../../docs/99_shared/documentation/ms-word/) - - [Docs / Übergreifend / Entwicklungsumgebungen - IDE](../../docs/99_shared/ide/) - - [Docs / Übergreifend / Entwicklungsumgebungen - IDE / IntelliJ IDEA – dein Einstieg ins professionelle Programmieren / IntelliJ installieren](../../docs/99_shared/ide/intellij/01_installation/) - - [Docs / Übergreifend / Entwicklungsumgebungen - IDE / IntelliJ IDEA – dein Einstieg ins professionelle Programmieren / IntelliJ einrichten](../../docs/99_shared/ide/intellij/02_einrichten/) - - [Docs / Übergreifend / Entwicklungsumgebungen - IDE / IntelliJ IDEA – dein Einstieg ins professionelle Programmieren / Mit IntelliJ Java Code kompilieren, ausführen und debuggen](../../docs/99_shared/ide/intellij/03_run-and-debug/) - - [Docs / Übergreifend / Entwicklungsumgebungen - IDE / IntelliJ IDEA – dein Einstieg ins professionelle Programmieren / Git mit IntelliJ nutzen](../../docs/99_shared/ide/intellij/04_git/) - - [Docs / Übergreifend / Entwicklungsumgebungen - IDE / IntelliJ IDEA – dein Einstieg ins professionelle Programmieren / Geheimnisse schützen / Secrets im Java-Projekt](../../docs/99_shared/ide/intellij/05_secrets/01_secrets-in-java/) - - [Docs / Übergreifend / Entwicklungsumgebungen - IDE / IntelliJ IDEA – dein Einstieg ins professionelle Programmieren / Geheimnisse schützen / Secrets im Node.js Projekt](../../docs/99_shared/ide/intellij/05_secrets/02_secrets-in-typescript/) - - [Docs / Übergreifend / Entwicklungsumgebungen - IDE / IntelliJ IDEA – dein Einstieg ins professionelle Programmieren / Geheimnisse schützen](../../docs/99_shared/ide/intellij/05_secrets/) - - [Docs / Übergreifend / Entwicklungsumgebungen - IDE / IntelliJ IDEA – dein Einstieg ins professionelle Programmieren / Debugging in IntelliJ](../../docs/99_shared/ide/intellij/06_debugging/) - - [Docs / Übergreifend / Entwicklungsumgebungen - IDE / IntelliJ IDEA – dein Einstieg ins professionelle Programmieren / Packages lokal verwenden](../../docs/99_shared/ide/intellij/07_packages/) - - [Docs / Übergreifend / Entwicklungsumgebungen - IDE / IntelliJ IDEA – dein Einstieg ins professionelle Programmieren](../../docs/99_shared/ide/intellij/) - - [Docs / Übergreifend / Feedback zu IT-Ninjas](../../docs/99_shared/it-ninjas/) - - [Docs / Übergreifend / Feedback zu IT-Ninjas / Cheatsheet](../../docs/99_shared/it-ninjas/cheatsheet/) - - [Docs / Übergreifend / Programmiersprachen](../../docs/99_shared/programming_languages/) - - [Docs / Übergreifend / Programmiersprachen / Java](../../docs/99_shared/programming_languages/java/) - - [Docs / Übergreifend / shell](../../docs/99_shared/shell/) - - [Docs / Übergreifend / shell / Cmd Shell](../../docs/99_shared/shell/cmd/) - - [Docs](../../docs/) - - [Exams / Java Exams / Java Grundlagen Exams / Exam Java Grundlagen - Zahlen-Array](../../exams/02_java/03_java-grundlagen/01_exam1/) - - [Exams / Web Exams / HTML-, CSS- und JavaScript-Exams / Exam zu den HTML- und CSS-Basics](../../exams/03_frontend/02_html_css/01_exam-html-css-rtm/) - - [Exams / Web Exams / HTML-, CSS- und JavaScript-Exams](../../exams/03_frontend/02_html_css/) - - [Exams / Web Exams / Exam zu JavaScript](../../exams/03_frontend/03_javascript/) - - [Exams / Web Exams / Angular Exams / Exam zu den Angular-Basics](../../exams/03_frontend/06_angular/01_angular-exam/) - - [Exams / Web Exams / Angular Exams / Exam zu Angular](../../exams/03_frontend/06_angular/02_notenverwaltung/) - - [Exams / Web Exams / Angular Exams](../../exams/03_frontend/06_angular/) - - [Exams / Web Exams / Angular NgRx Exams / Exam zu NgRx](../../exams/03_frontend/07_angular-ngrx/01_ngrx/) - - [Exams / Web Exams / Angular NgRx Exams](../../exams/03_frontend/07_angular-ngrx/) - - [Exams / Web Exams](../../exams/03_frontend/) - - [Labs / Java Labs / Java Exercises - Grundlagen / Java Exercises - Einfaches Hello World](../../labs/02_java/03_java-grundlagen/00_simple-hello-world/) - - [Labs / Java Labs / Java Exercises - Grundlagen / Java Exercises - Ausgabe auf die Kommandozeile](../../labs/02_java/03_java-grundlagen/01_console/) - - [Labs / Java Labs / Java Exercises - Grundlagen / Java Exercises - Variablen und primitive Datentypen](../../labs/02_java/03_java-grundlagen/04_variables-and-types/) - - [Labs / Java Labs / Java Exercises - Grundlagen / Java Exercises - Einfache Berechnungen](../../labs/02_java/03_java-grundlagen/05_logic/) - - [Labs / Java Labs / Java Exercises - Grundlagen / Java Exercises - Variablen und bedingte Anweisungen](../../labs/02_java/03_java-grundlagen/06_control-structures-if/) - - [Labs / Java Labs / Java Exercises - Grundlagen / Java Exercises - Loops](../../labs/02_java/03_java-grundlagen/06_control-structures-loops/) - - [Labs / Java Labs / Java Exercises - Grundlagen / Java Exercises - Das Switch Statement](../../labs/02_java/03_java-grundlagen/06_control-structures-switch/) - - [Labs / Java Labs / Java Exercises - Grundlagen / Java Exercises - Methoden](../../labs/02_java/03_java-grundlagen/08_methods/) - - [Labs / Java Labs / Java Exercises - Grundlagen / Java Exercises - Exception Handling](../../labs/02_java/03_java-grundlagen/09_exception_handling/) - - [Labs / Java Labs / Java Exercises - Grundlagen / Java Exercises - Debugging](../../labs/02_java/03_java-grundlagen/10_debugging/) - - [Labs / Java Labs / Java Exercises - Grundlagen / Java Exercises - Packages](../../labs/02_java/03_java-grundlagen/12_packages/) - - [Labs / Java Labs / Java Exercises - Grundlagen / Java Exercises - Strings](../../labs/02_java/03_java-grundlagen/13_strings/) - - [Labs / Java Labs / Java Exercises - Grundlagen / Java Exercises - Regex](../../labs/02_java/03_java-grundlagen/16_regex/) - - [Labs / Java Labs / Java Exercises - Grundlagen / Java Exercises - Regex / regex - Source](../../labs/02_java/03_java-grundlagen/16_regex/source/) - - [Labs / Java Labs / Java Exercises - Maven / Maven - Aufgaben](../../labs/02_java/05_maven/01_Exercises/) - - [Labs / Java Labs / Java Exercises - Testing / CI-Pipeline - Aufgaben (optional)](../../labs/02_java/08_java-testing/03_ci/) - - [Labs / Web Labs / HTML und CSS - Aufgaben / HTML - Aufgaben](../../labs/03_frontend/01_html-css/01_html/) - - [Labs / Web Labs / HTML und CSS - Aufgaben / CSS - Aufgaben](../../labs/03_frontend/01_html-css/02_css/) - - [Labs / Web Labs / HTML und CSS - Aufgaben](../../labs/03_frontend/01_html-css/) - - [Labs / Web Labs / Javascript Labs / JavaScript - Aufgaben](../../labs/03_frontend/02_javascript/01_javascript/) - - [Labs / Web Labs / Javascript Labs](../../labs/03_frontend/02_javascript/) - - [Labs / Web Labs / Typescript Labs / Labs zu den TypeScript-Basics](../../labs/03_frontend/03_typescript/01_typescript/) - - [Labs / Web Labs / Typescript Labs](../../labs/03_frontend/03_typescript/) - - [Labs / Web Labs / Angular Labs / Labs zu Angular](../../labs/03_frontend/04_angular/01_angular/) - - [Labs / Web Labs / Angular Labs / Labs zu RxJS](../../labs/03_frontend/04_angular/02_rxjs/) - - [Labs / Web Labs / Angular Labs / Labs zu Signals](../../labs/03_frontend/04_angular/03_signals/) - - [Labs / Web Labs / Angular Labs](../../labs/03_frontend/04_angular/) - - [Labs / Web Labs / Angular NgRx Labs (optional) / NgRx Labs](../../labs/03_frontend/05_angular-ngrx/01_ngrx/) - - [Labs / Web Labs / Angular NgRx Labs (optional)](../../labs/03_frontend/05_angular-ngrx/) - - [Labs / Web Labs](../../labs/03_frontend/) - - [Labs / Tools](../../labs/99_shared/) - - [Labs / Tools / Datenbanken / Setup](../../labs/99_shared/database/01_setup/) - - [Labs / Tools / Datenbanken / SQL Syntax](../../labs/99_shared/database/02_sql_syntax/) - - [Labs / Tools / Datenbanken](../../labs/99_shared/database/) - - [Labs / Tools / Git Labs / Git Hands On Aufgabe](../../labs/99_shared/git/01_grundlagen/) - - [Labs / Tools / Git Labs / Git Vertiefung Labs / Aufgabe: Teambildung](../../labs/99_shared/git/02_vertiefung/01_team/) - - [Labs / Tools / Git Labs / Git Vertiefung Labs / Aufgabe: Vorbereiten der IDE](../../labs/99_shared/git/02_vertiefung/02_preparing/) - - [Labs / Tools / Git Labs / Git Vertiefung Labs / Aufgabe: Arbeiten im Team an einem Projekt](../../labs/99_shared/git/02_vertiefung/03_collaboration/) - - [Labs / Tools / Git Labs / Git Vertiefung Labs / Aufgabe: Arbeiten im Team an einem Projekt](../../labs/99_shared/git/02_vertiefung/04_merge-conflict/) - - [Labs / Tools / Git Labs / Git Vertiefung Labs / Aufgabe: Arbeiten mit mehreren Projekten](../../labs/99_shared/git/02_vertiefung/05_project-switch/) - - [Labs / Tools / Git Labs / Git Vertiefung Labs / Aufgabe: Arbeiten mit unterschiedlichen Branches](../../labs/99_shared/git/02_vertiefung/06_branch-switch/) - - [Labs / Tools / Git Labs](../../labs/99_shared/git/) - - [Labs / Tools / Java / Geheimnisse sicher aufbewahren / Secrets - Geheimnisse sicher hinterlegen](../../labs/99_shared/java/05_secrets/01_SimpleExample/) - - [Labs / Tools / Java / Geheimnisse sicher aufbewahren / Secrets - Geheimnisse sicher hinterlegen / SimpleExample - Source](../../labs/99_shared/java/05_secrets/01_SimpleExample/source/) - - [Labs / Tools / Java / Geheimnisse sicher aufbewahren](../../labs/99_shared/java/05_secrets/) - - [Labs / Tools / Java](../../labs/99_shared/java/) -- **Gelöscht** - - Docs / 03_web - - Docs / 07_testing - - Docs / 99_tools - - Labs / 04_git / 02_vertiefung - ---- - -## 20250909-1020-132 - -_2025-09-09 10:20 CEST auf origin/master_ - -### Seiten-Änderungen - -- **Geändert** - - [Labs / Java Labs / Java Exercises - Grundlagen / Java Exercises - Variablen und bedingte Anweisungen](../../labs/02_java/03_java-grundlagen/06_control-structures-if/) - - [Labs / Java Labs / Java Exercises - Grundlagen / Java Exercises - Variablen und bedingte Anweisungen / control-structures-if - Source](../../labs/02_java/03_java-grundlagen/06_control-structures-if/source/) - - [Labs / Java Labs / Java Exercises - Grundlagen / Java Exercises - Packages](../../labs/02_java/03_java-grundlagen/12_packages/) - - [Labs / Java Labs / Java Exercises - Grundlagen / Java Exercises - Regex](../../labs/02_java/03_java-grundlagen/16_regex/) - - [Labs / Java Labs / Java Exercises - Grundlagen / Java Exercises - Regex / regex - Source](../../labs/02_java/03_java-grundlagen/16_regex/source/) - ---- - -## 20250904-0616-130 - -_2025-09-04 06:16 CEST auf origin/master_ - -### Seiten-Änderungen - -- **Geändert** - - [Docs / Tools / Nützliche Tips, Tricks und Anleitungen / Reguläre Ausdrücke](../../docs/99_shared/diverses/regex/) - ---- - -## 20250903-1654-126 - -_2025-09-03 16:54 CEST auf origin/master_ - -### Seiten-Änderungen - -- **Hinzugefügt** - - [Docs / Java / Java Grundlagen / Module abschliessen](../../docs/02_java/03_java-grundlagen/99_wrap_up/) -- **Geändert** - - [Docs / Tools / Entwicklungsumgebungen - IDE / IntelliJ IDEA – dein Einstieg ins professionelle Programmieren / Git mit IntelliJ nutzen](../../docs/99_shared/ide/intellij/04_git/) - ---- - -## 20250903-1632-125 - -_2025-09-03 16:32 CEST auf origin/master_ - -### Seiten-Änderungen - -- **Hinzugefügt** - - [Docs / Java / Java Grundlagen / Enums – Grundlagen](../../docs/02_java/03_java-grundlagen/18_enums/) - - [Lernprojekt / Projekt 2025 – Online Game / Projekt: Logger](../../project/project-2025/Logger/) - - [Lernprojekt / Projekt 2025 – Online Game](../../project/project-2025/) -- **Geändert** - - [About](../../about/) - - [Docs / Java / Java Grundlagen / Reguläre Ausdrücke in Java (RegEx)](../../docs/02_java/03_java-grundlagen/16_regex/) - - [Docs / Java / Java Grundlagen / Utility Klassen](../../docs/02_java/03_java-grundlagen/17_utility_classes/) - - [Docs / Tools / Nützliche Tips, Tricks und Anleitungen / Reguläre Ausdrücke](../../docs/99_shared/diverses/regex/) - - [Labs / Java Labs / Java Exercises - Grundlagen / Java Exercises - Strings](../../labs/02_java/03_java-grundlagen/13_strings/) - - [Lernprojekt](../../project/) - ---- diff --git a/content/2025/labs/99_shared/database/01_setup/_index.md b/content/2025/challenges/database/01_setup/_index.md similarity index 100% rename from content/2025/labs/99_shared/database/01_setup/_index.md rename to content/2025/challenges/database/01_setup/_index.md diff --git a/content/2025/labs/99_shared/database/01_setup/images/connection.png b/content/2025/challenges/database/01_setup/images/connection.png similarity index 100% rename from content/2025/labs/99_shared/database/01_setup/images/connection.png rename to content/2025/challenges/database/01_setup/images/connection.png diff --git a/content/2025/labs/99_shared/database/01_setup/images/db-auswahl.png b/content/2025/challenges/database/01_setup/images/db-auswahl.png similarity index 100% rename from content/2025/labs/99_shared/database/01_setup/images/db-auswahl.png rename to content/2025/challenges/database/01_setup/images/db-auswahl.png diff --git a/content/2025/labs/99_shared/database/01_setup/images/ende.png b/content/2025/challenges/database/01_setup/images/ende.png similarity index 100% rename from content/2025/labs/99_shared/database/01_setup/images/ende.png rename to content/2025/challenges/database/01_setup/images/ende.png diff --git a/content/2025/labs/99_shared/database/01_setup/images/neue-verbindung.png b/content/2025/challenges/database/01_setup/images/neue-verbindung.png similarity index 100% rename from content/2025/labs/99_shared/database/01_setup/images/neue-verbindung.png rename to content/2025/challenges/database/01_setup/images/neue-verbindung.png diff --git a/content/2025/labs/99_shared/database/01_setup/images/sql-editor.png b/content/2025/challenges/database/01_setup/images/sql-editor.png similarity index 100% rename from content/2025/labs/99_shared/database/01_setup/images/sql-editor.png rename to content/2025/challenges/database/01_setup/images/sql-editor.png diff --git a/content/2025/labs/99_shared/database/02_sql_syntax/_index.md b/content/2025/challenges/database/02_sql_syntax/_index.md similarity index 100% rename from content/2025/labs/99_shared/database/02_sql_syntax/_index.md rename to content/2025/challenges/database/02_sql_syntax/_index.md diff --git a/content/2025/labs/99_shared/database/02_sql_syntax/images/zoo-erd.png b/content/2025/challenges/database/02_sql_syntax/images/zoo-erd.png similarity index 100% rename from content/2025/labs/99_shared/database/02_sql_syntax/images/zoo-erd.png rename to content/2025/challenges/database/02_sql_syntax/images/zoo-erd.png diff --git a/content/2025/labs/99_shared/database/_index.md b/content/2025/challenges/database/_index.md similarity index 100% rename from content/2025/labs/99_shared/database/_index.md rename to content/2025/challenges/database/_index.md diff --git "a/content/2025/labs/99_shared/database/solutions/L\303\266sung Onlineshop ERD.drawio" "b/content/2025/challenges/database/solutions/L\303\266sung Onlineshop ERD.drawio" similarity index 100% rename from "content/2025/labs/99_shared/database/solutions/L\303\266sung Onlineshop ERD.drawio" rename to "content/2025/challenges/database/solutions/L\303\266sung Onlineshop ERD.drawio" diff --git "a/content/2025/labs/99_shared/database/solutions/L\303\266sung Onlineshop ERD.png" "b/content/2025/challenges/database/solutions/L\303\266sung Onlineshop ERD.png" similarity index 100% rename from "content/2025/labs/99_shared/database/solutions/L\303\266sung Onlineshop ERD.png" rename to "content/2025/challenges/database/solutions/L\303\266sung Onlineshop ERD.png" diff --git a/content/2025/labs/99_shared/database/solutions/Solution_SQL_Murder_Mystery.txt b/content/2025/challenges/database/solutions/Solution_SQL_Murder_Mystery.txt similarity index 100% rename from content/2025/labs/99_shared/database/solutions/Solution_SQL_Murder_Mystery.txt rename to content/2025/challenges/database/solutions/Solution_SQL_Murder_Mystery.txt diff --git a/content/2025/docs/99_shared/database/01_db-erklaert/_index.md b/content/2025/docs/02_java/11_java-jdbc/01_Database_Introduction/_index.md similarity index 100% rename from content/2025/docs/99_shared/database/01_db-erklaert/_index.md rename to content/2025/docs/02_java/11_java-jdbc/01_Database_Introduction/_index.md diff --git a/content/2025/docs/99_shared/database/01_db-erklaert/images/begriffe-relationaler-datenbanken.png b/content/2025/docs/02_java/11_java-jdbc/01_Database_Introduction/images/begriffe-relationaler-datenbanken.png similarity index 100% rename from content/2025/docs/99_shared/database/01_db-erklaert/images/begriffe-relationaler-datenbanken.png rename to content/2025/docs/02_java/11_java-jdbc/01_Database_Introduction/images/begriffe-relationaler-datenbanken.png diff --git a/content/2025/docs/99_shared/database/01_db-erklaert/images/beispiel-bank.drawio b/content/2025/docs/02_java/11_java-jdbc/01_Database_Introduction/images/beispiel-bank.drawio similarity index 100% rename from content/2025/docs/99_shared/database/01_db-erklaert/images/beispiel-bank.drawio rename to content/2025/docs/02_java/11_java-jdbc/01_Database_Introduction/images/beispiel-bank.drawio diff --git a/content/2025/docs/99_shared/database/01_db-erklaert/images/beispiel-bank.png b/content/2025/docs/02_java/11_java-jdbc/01_Database_Introduction/images/beispiel-bank.png similarity index 100% rename from content/2025/docs/99_shared/database/01_db-erklaert/images/beispiel-bank.png rename to content/2025/docs/02_java/11_java-jdbc/01_Database_Introduction/images/beispiel-bank.png diff --git a/content/2025/docs/99_shared/database/01_db-erklaert/images/nosql-databases.jpg b/content/2025/docs/02_java/11_java-jdbc/01_Database_Introduction/images/nosql-databases.jpg similarity index 100% rename from content/2025/docs/99_shared/database/01_db-erklaert/images/nosql-databases.jpg rename to content/2025/docs/02_java/11_java-jdbc/01_Database_Introduction/images/nosql-databases.jpg diff --git a/content/2025/docs/99_shared/database/02_sql-syntax/_index.md b/content/2025/docs/02_java/11_java-jdbc/02_sql-basics/_index.md similarity index 75% rename from content/2025/docs/99_shared/database/02_sql-syntax/_index.md rename to content/2025/docs/02_java/11_java-jdbc/02_sql-basics/_index.md index 1115d8e474..d71c0dde24 100644 --- a/content/2025/docs/99_shared/database/02_sql-syntax/_index.md +++ b/content/2025/docs/02_java/11_java-jdbc/02_sql-basics/_index.md @@ -297,6 +297,8 @@ welches in beiden Tabellen vertreten ist. So wird dann die Verbindung hergestell Bei Joins gibt es viele verschiedene und teilweise sehr komplexe Varianten, welche auch dementsprechend selten benutzt werden. Wir schauen uns hier die vier wichtigsten an. +Da diese nicht oft in der Praxis zum Einsatz kommen, sind Right-, Left- sowie auch Full-Join in dieser Doku Optional. + ### Inner Join (_join_) Der Inner Join ist der wichtigste und am meisten benötigte Join. Der Inner Join verbindet die Tabellen und gibt nur @@ -313,7 +315,7 @@ Das dazugehörige Statement würde so aussehen: SELECT * FROM tabelle_a INNER JOIN tabelle_b ON tabelle_a.id = tabelle_b.id; ``` -### Right und Left Join +### Right und Left Join (Optional) Im Vergleich zum Inner Join wird beim Right und Left Join nicht nur die Schnittmenge, sondern auch noch eine äussere Menge zurückgegeben. Grafisch würde das so aussehen: @@ -397,7 +399,7 @@ Resultat: > beruf_id ist doppelt, da es in beiden Tabellen ein Attribut mit diesem Namen gibt. Könnte mit der Auswahl im Select > auch ausgeblendet werden. -### Full Join +### Full Join (Optional) Der Full Join ist sehr eng mit dem Left und Right Join verwandt. Jetzt werden jedoch alle Werte zurückgegeben. Wenn kein Gegenstück zu einem Wert vorhanden ist, werden diese gleich wie beim Left und Right Join mit `null` angegeben. Grafisch @@ -445,192 +447,12 @@ Resultat: In diesem Abschnitt gehen wird auf Aggregationen und weitere wichtige Syntax-Elemente ein. Aggregationen in SQL sind Funktionen, die verwendet werden, um zusammengefasste Informationen aus großen Datenmengen zu erhalten. Dadurch wird es einfacher, die Daten zu analysieren und Muster oder Trends zu erkennen. +Dazu gehören unter anderem: -### Count - -Die Aggregation Count zählt wie viele Resultate das beim Query zurückgegeben werden. Count funktioniert bei allen -Datentypen gleich und muss nicht angepasst werden. Hier ein Beispiel zu Count: - -Ausgangstabelle Person: - -| vorname | nachname | alter | beruf | -| ------- | ---------- | ----- | ------------------ | -| Anja | Ackermann | 13 | Schüler/in | -| Fritz | Fischer | 26 | Pilot/in | -| Hans | Hansen | 52 | Hochbauzeichner/in | -| Max | Mustermann | 18 | Maurer/in | -| Leo | Leonidas | 35 | `null` | - -Statement: - -```sql -SELECT COUNT(*), COUNT(beruf) FROM person; -``` - -Resultat: - -| count(\*) | count(beruf) | -| --------- | ------------ | -| 5 | 4 | - -Aus dem Resultat lässt sich schliessen, dass NULL-Werte im Count nicht beachtet werden. - -### Max/Min - -Die Aggregationen Max und Min sind logischerweise zum Finden des grössten und kleinsten Wertes. Beide funktionieren -bei allen Datentypen, jedoch haben sie beispielsweise bei einem String einen anderen Weg das Maximum und Minimum zu -finden. Dort wird anhand einer Collation (Sortierungsregel) das Maximum und Minimum bestimmt. Bei normalen Zahlen sieht -es so aus: - -Ausgangstabelle Person: - -| vorname | nachname | alter | beruf | -| ------- | ---------- | ----- | ------------------ | -| Anja | Ackermann | 13 | Schüler/in | -| Fritz | Fischer | 26 | Pilot/in | -| Hans | Hansen | 52 | Hochbauzeichner/in | -| Max | Mustermann | 18 | Maurer/in | -| Leo | Leonidas | 35 | `null` | - -Statement: - -```sql -SELECT MAX(alter), MIN(alter) FROM person; -``` - -Resultat: - -| max(alter) | min(alter) | -| ---------- | ---------- | -| 52 | 13 | - -### Sum - -Sum summiert die Werte einer Spalte. Im Gegensatz zu den vorherigen Aggregationen funktioniert Sum nur mit Zahlenwerten. -Bei Strings oder ähnlichem wird ein Fehler zurückgegeben. Hier ein Beispiel zur Verwendung von Sum: - -Ausgangstabelle Person: - -| vorname | nachname | alter | beruf | -| ------- | ---------- | ----- | ------------------ | -| Anja | Ackermann | 13 | Schüler/in | -| Fritz | Fischer | 26 | Pilot/in | -| Hans | Hansen | 52 | Hochbauzeichner/in | -| Max | Mustermann | 18 | Maurer/in | -| Leo | Leonidas | 35 | `null` | - -Statement: - -```sql -SELECT SUM(alter) FROM person; -``` - -Resultat: - -| sum(alter) | -| ---------- | -| 144 | - -### Avg - -Um den Durchschnitt von Zahlen zu finden wird die Funktion AVG verwendet. Gleich wie Sum funktioniert Avg nur mit Zahlen. -Hier ein Beispiel zu avg: - -Ausgangstabelle Person: - -| vorname | nachname | alter | beruf | -| ------- | ---------- | ----- | ------------------ | -| Anja | Ackermann | 13 | Schüler/in | -| Fritz | Fischer | 26 | Pilot/in | -| Hans | Hansen | 52 | Hochbauzeichner/in | -| Max | Mustermann | 18 | Maurer/in | -| Leo | Leonidas | 35 | `null` | - -Statement: - -```sql -SELECT AVG(alter) FROM person; -``` - -Resultat: - -| avg(alter) | -| ---------- | -| 28.8 | - -### Order By - -Das Keyword Order By ist zum Sortieren des Resultats sehr nützlich. Zusammen mit ASC (=Ascending, Aufsteigend) und DESC -(=Descending, Absteigend) kann das Resultat auf verschiedenste Weisen nach einem oder mehreren Attributen sortiert -werden. Standardmässig verwendet Order By ASC, daher kann das ASC im Query auch weggelassen werden. Beispiel zu Order By: - -Ausgangstabelle Person: - -| vorname | nachname | alter | beruf | -| ------- | ---------- | ----- | ------------------ | -| Anja | Ackermann | 13 | Schüler/in | -| Fritz | Fischer | 26 | Pilot/in | -| Hans | Hansen | 52 | Hochbauzeichner/in | -| Max | Mustermann | 18 | Maurer/in | -| Leo | Leonidas | 35 | `null` | - -Statement ASC: - -```sql -SELECT vorname, alter FROM person ORDER BY alter ASC; -``` - -Resultat: - -| vorname | alter | -| ------- | ----- | -| Anja | 13 | -| Max | 18 | -| Fritz | 26 | -| Leo | 35 | -| Hans | 52 | - -Statement DESC: - -```sql -SELECT vorname, alter FROM person ORDER BY alter DESC; -``` - -Resultat: - -| vorname | alter | -| ------- | ----- | -| Hans | 52 | -| Leo | 35 | -| Fritz | 26 | -| Max | 18 | -| Anja | 13 | - -### Group By - -Mit Group By können Tupel mit gleichen Werten bei einem Attribut zusammen geführt werden, um beispielsweise in einem -Count gezählt zu werden. Wie bei Order By kann ein Resultat mehrfach gruppiert werden. Hier ein einfaches Beispiel zu -Order By: - -Ausgangstabelle Person: - -| vorname | nachname | alter | beruf | -| ------- | ---------- | ----- | ------------------ | -| Anja | Ackermann | 13 | Hochbauzeichner/in | -| Fritz | Fischer | 26 | Pilot/in | -| Hans | Hansen | 52 | Hochbauzeichner/in | -| Max | Mustermann | 18 | Pilot/in | -| Leo | Leonidas | 35 | Pilot/in | - -Statement: - -```sql -SELECT COUNT(*), beruf FROM person GROUP BY beruf; -``` - -Resultat: +- Count +- Max/Min +- Sum +- Avg +- Group By -| count(\*) | beruf | -| --------- | ------------------ | -| 2 | Hochbauzeichner/in | -| 3 | Pilot/in | +Wie diese angewendet werden findest du hier: https://mariadb.com/docs/server/reference/sql-functions/aggregate-functions diff --git a/content/2025/docs/99_shared/database/02_sql-syntax/images/full-join.png b/content/2025/docs/02_java/11_java-jdbc/02_sql-basics/images/full-join.png similarity index 100% rename from content/2025/docs/99_shared/database/02_sql-syntax/images/full-join.png rename to content/2025/docs/02_java/11_java-jdbc/02_sql-basics/images/full-join.png diff --git a/content/2025/docs/99_shared/database/02_sql-syntax/images/inner-join.png b/content/2025/docs/02_java/11_java-jdbc/02_sql-basics/images/inner-join.png similarity index 100% rename from content/2025/docs/99_shared/database/02_sql-syntax/images/inner-join.png rename to content/2025/docs/02_java/11_java-jdbc/02_sql-basics/images/inner-join.png diff --git a/content/2025/docs/99_shared/database/02_sql-syntax/images/left-join.png b/content/2025/docs/02_java/11_java-jdbc/02_sql-basics/images/left-join.png similarity index 100% rename from content/2025/docs/99_shared/database/02_sql-syntax/images/left-join.png rename to content/2025/docs/02_java/11_java-jdbc/02_sql-basics/images/left-join.png diff --git a/content/2025/docs/99_shared/database/02_sql-syntax/images/right-join.png b/content/2025/docs/02_java/11_java-jdbc/02_sql-basics/images/right-join.png similarity index 100% rename from content/2025/docs/99_shared/database/02_sql-syntax/images/right-join.png rename to content/2025/docs/02_java/11_java-jdbc/02_sql-basics/images/right-join.png diff --git a/content/2025/docs/99_shared/database/03_constraints/_index.md b/content/2025/docs/02_java/11_java-jdbc/03_constraints/_index.md similarity index 100% rename from content/2025/docs/99_shared/database/03_constraints/_index.md rename to content/2025/docs/02_java/11_java-jdbc/03_constraints/_index.md diff --git a/content/2025/docs/02_java/11_java-jdbc/04_jdbc/_index.md b/content/2025/docs/02_java/11_java-jdbc/04_jdbc/_index.md new file mode 100644 index 0000000000..a74c8a3cec --- /dev/null +++ b/content/2025/docs/02_java/11_java-jdbc/04_jdbc/_index.md @@ -0,0 +1,218 @@ +--- +title: "JDBC (Java Database connection)" +linkTitle: "JDBC (Java Database connection)" +weight: 4 +--- + +#### Ziele + +- Ich weiss was die JDBC-Schnittstelle ist und wofür sie benutzt wird +- Ich weiss was JDBC-Treiber sind und warum sie benötigt werden +- Ich kenne die wichtigsten Interfaces der JDBC-Schnittstelle +- Ich weiss wie parametrisierte SQL-Anweisungen verwendet werden können +- Ich kann eine Datenbank-Verbindung aus einer Java-Anwendung herstellen +- Ich kann CRUD-Operationen aus einer Java-Anwendung ausführen + +## Einleitung + +Die meisten Apps und Webseiten, welche wir heutzutage fast täglich verwenden, dienen lediglich der Datenverarbeitung. +Sobald du ein Bild deines Freundes likest, den Fahrplan abrufst oder eine neue Tastatur bestellst, +es werden immer Daten gelesen, geschrieben, bearbeitet oder gelöscht. +Es gibt Frameworks (darunter z.B. Spring), welche die Verbindung zu Datenbanken verwalten und die sog. +"Boiler-Plate"-Details dazu von den Entwicklern verbergen. Diese Frameworks bieten auch einfache +Interaktion mit der Datenbank z.B. im Form von CRUD-Operationen. +Durch das Verwenden solcher Frameworks kann auf "Boiler-Plate" Code verzichtet werden. +Die Entwicklung von Business-Logik ist somit von infrastrukturellen Details getrennt. + +Es gibt jedoch Situationen, wo solche Frameworks nicht benutzt werden können oder man muss bestimmte +Aktivitäten, welche diese Frameworks out-of-the-box anbieten, anders gestalten. +In solchen Situationen kann die JDBC-Bibliothek von Java verwendet werden. + +## Was ist JDBC + +JDBC ist eine Schnittstelle, welche dafür benutzt wird, um aus einer Java Anwendung eine Verbindung +zu einer Datenbank herzustellen und Queries auf den Daten darin (z.B. lesen oder bearbeiten) ausführen zu können. +Die JDBC-Schnittstelle stellt eine Datenbank unabhängige API zur Verfügung und trägt damit dazu bei, dass +die Anwendung nicht an einer bestimmten Datenbank stark gekoppelt ist (sprich, die Anwendung muss die +unterliegende Datenbank, theoretisch, gar nicht kennen). + +Um die eigentliche Verbindung mit der Datenbank zu ermöglichen, werden JDBC-Treiber eingesetzt. +Ein JDBC-Treiber ist eine Software-Komponente, welche die Zugriffstechnik für eine bestimmte Datenbank +(z.B. Oracle, Postgres usw.) kennt und somit in der Lage ist, Anfragen an der Datenbank weiterzuleiten +wie auch die Ergebnisse zurückzuliefern. Solche Treiber können umgetauscht werden, wenn die unterliegende Datenbank +geändert werden soll, ohne dass es zu einer Anpassung in der Anwendung-Code kommt. + +Eine vereinfachte Darstellung der JDBC-Architektur sieht also wie folgt aus: + +![](images/jdbc-architektur.png "JDBC-Architektur") + +## JDBC in der Praxis + +Die Klassen und Interfaces der JDBC-Schnittstelle befinden sich im Paket "java.sql". +Entsprechend reicht ein "import"-Statement um mit diesen Klassen/Interfaces arbeiten zu können. +Die JDBC-Treiber sind jedoch separate und proprietäre Komponenten, welche zur Laufzeit vorhanden sein müssen +damit der Classloader sie wirklich laden kann. Bei einem Maven-Projekt wird dies mittels einer Maven-Abhängigkeit +erledigt. Ansonsten muss die Jar-Datei des Treibers auf dem Klassenpfad vorhanden sein. + +Die ersten Schritte bei der Arbeit mit der JDBC-Schnittstelle beinhalten die nötige Konfiguration um die +Verbindung zur Datenbank herstellen zu können. Anschliessend können Abfragen und sonstige +SQL-Anweisungen ausgeführt werden. + +Die folgenden Abschnitte zeigen die nötigen Schritte anhand von Beispielen. +Diese Beispiele wurden in einem Maven-Projekt ohne das Spring-Framework erstellt. + +### Maven-Dependency + +Sobald die gewünschte Datenbank festgelegt wurde, kann der dazugehörende JDBC-Treiber als +Maven-Abhängigkeit herangezogen werden. + +Das folgende Beispiel zeigt eine Abhängigkeit zu einem MySql-Treiber: + +![dependency.png](images/dependency.png) + +Die restlichen Schritte erfolgen im Java-Code. + +### Treiber laden/registrieren + +**Hinweis** +Dieser Schritt wird nur bei JDBC-Versionen benötigt, welche älter sind als die Version 4! +Bei neueren Versionen, werden alle Treiber geladen, welche auf dem Klassenpfad gefunden werden und +somit braucht es diesen Schritt nicht mehr. + +Mit der statischen Methode _forName_ von _Class_ wird die Klasse _Driver_ geladen. +Hier geht es um die Datenbank spezifischer Treiber, welche es der Anwendung den Datenzugriff auf der +gewünschten Datenbank ermöglicht. + +Im folgenden Beispiel wird der JDBC-Treiber für MySql registriert: + +![](images/driver_registration.png) + +### Datenbankverbindung herstellen + +Der Zugriff auf einer Datenbank erfordert die Konfiguration folgender Elemente: + +- url: eine JDBC-URL, welche auf die gewünschte Datenquelle zeigt +- Benutzername: einer, für den Zugriff auf die Datenbank, autorisierter Benutzer +- Passwort: das Passwort des autorisierten Benutzers, womit er sich authentifizieren kann + +![](images/connection_configuration.png) + +Die Konfiguration wird hier einfachheitshalber als Klartext im Code geschrieben. +Selbstverständlich dürfen vertrauliche Informationen wie z.B. das Passwort nicht als Klartext im Code stehen. +Für diesen Zweck, wie auch für die Konfiguration unterschiedlichen Umgebungen, eignen sich System- +oder Umgebungsvariablen (mit oder ohne Verschlüsselung) besser. + +Die obige Konfiguration kann nun für die Herstellung einer Datenbankverbindung verwendet werden. +Dazu wird die statische Methode _getConnection_ der Klasse _DriverManager_ verwendet: + +![](images/connection_creation.png) + +Ab diesem Punkt repräsentiert das Connection-Objekt die Verbindung zur Datenbank. + +### SQL-Anweisung vorbereiten + +Die SQL-Anweisung kann als String vor der Ausführung vorbereitet werden: + +![](images/select_query_no_params.png) + +Wenn eine IDE wie z.B. IntelliJ verwendet wird und eine Datasource mit der richtigen Datenbank definiert wird, +erkennt die IDE, dass es sich um eine SQL-Anweisung handelt und liefert entsprechend +Vorschläge und formatiert die Anweisung richtig und gut leserlich. + +Die obige SQL-Anweisung dient dazu alle Daten aus einer bestehenden Tabelle zu Lesen. +SQL-Anweisungen können aber auch Operationen wie Tabellen erstellen, Daten einfügen, löschen oder +bearbeiten usw. beinhalten. + +Als Beispiel, erstellt die folgende SQL-Anweisung eine Tabelle - falls diese noch nicht existiert - +mit ein paar gewünschten Attributen (Spalten): + +![](images/create_table_query.png) + +### SQL-Anweisung ausführen + +Um SQL-Anweisungen ausführen zu können wird zunächst ein Statement-Objekt aus dem vorhandenen +Connection-Objekt erzeugt. Dieses Statement-Objekt wird verwendet, um die SQL-Anweisung an die +Datenbank zu richten. Dazu wird eine der _execute_ Methoden des Statement-Objektes verwendet. + +Im folgenden Beispiel wird die ein Statement-Objekt mithilfe des Connection-Objekt erstellt. +Danach wird die Methode _executeQuery_ verwendet, welche eine SQL-Anweisung als +Parameter entgegennimmt, diese ausführt und eine Referenz auf die Ergebnismenge (sog. ResultSet) zurückliefert: + +![](images/statement_exectution.png) + +### Parametrisierte SQL-Anweisungen + +Bis jetzt haben wir SQL-Anweisungen ausgeführt, welche keine Einschränkungen beinhaltet haben. +Oft werden jedoch SQL-Anweisungen mit bestimmten Kriterien oder Einschränkungen benötigt damit die +zurückgelieferten Daten anhand dieser Kriterien gefiltert werden können. +In solchen Situationen wird der SQL "WHERE"-Befehl benutzt. Zum Beispiel: + +_SELECT \* FROM user WHERE username = 'gandalf' and age > 20;_ + +In diesem Beispiel, werden nur Einträge zurückgeliefert, welche die Kriterien _username = 'gandalf'_ +und _age > 20_ erfüllen. +Wenn nun dieselbe Anweisung mehrmals ausgeführt werden soll aber jeweils mit anderen Parameter (also mit unterschiedlichen _username_ und _age_), +wird die Anweisung mit Platzhaltern wie folgt geschrieben (ein Fragezeichen dient als einen Platzhalter): + +![](images/query_with_placeholder.png) + +Für das eigentliche Ausführen der Anweisung müssen alle Platzhalter durch konkrete Werte ersetzt werden. +Dazu wird ein _PreparedStatement_ verwendet, welche es erlaubt, alle Platzhalter anhand ihrer Position (beginnend mit 1) +mittels _setXXX_ Methoden anzusprechen und mit den konkreten Werten zu ersetzen. +Anschliessend, kann auch hier eine der _executeXXX_ Methoden verwendet werden, um die Anweisung auszuführen: + +![](images/prepared_statement.png) + +### Rückgabewerte verarbeiten + +Bei der Ausführung von bestimmten SQL-Anweisungen (z.B. bei SELECT Operationen), wird eine Ergebnismenge zurückgeliefert. +Ein ResultSet repräsentiert einen sog. _Cursor_ auf diese Ergebnismenge. +Die Methoden des ResultSets, bewegen den Cursor (je nach Art des Cursors) vorwärts, rückwärts, zur ersten oder zur letzten Position usw. +Somit kann über die gesamte Ergebnismenge, Zeile bei Zeile, iteriert werden, um die Werte zu lesen. + +![](images/resultset_iteration.png) + +Im obigen Beispiel wird die _next_ Methode verwendet um den Cursor jeweils eine Zeile vorwärtszubewegen. +Aus jeder Zeile werden aus dem ResultSet mittels _getXXX_ Methoden (XXX steht für den Typ des Wertes) +die Werte, welche in dieser aktuellen Zeile vorhanden sind. +Die _getXXX_ Methoden, bekommen als Parameter entweder die Spaltenposition oder den Spaltennamen, welche gelesen werden soll. +Bei einer Spaltenposition hat die erste zurückgelieferte Spalte die Position 1. +Hinter der letzten Zeile liefert die _next_ Methode _false_ zurück und somit wird die Schleife beendet, +nachdem alle Zeilen bearbeitet worden sind. + +### Verbindungen schliessen + +Objekte der Typ _Connection_, _Statement_ oder auch _PreparedStatement_ sind sog. Ressourcen. +Solche Ressourcen müssen nach Verbrauch wieder explizit geschlossen werden: + +![](images/close_statement_and_connection.png) + +Wenn diese Ressourcen innerhalb eines try-with-resources Befehls erstellt werden, entfällt diese +explizite Schliessung der Ressourcen. +Die Arbeit mit try-with-resources ist immer vorzuziehen, wenn es um Closable-Ressourcen geht. + +### Zusammenfassung + +Die folgende Beispiel-Methode fasst die oben erwähnten Arbeitsschritte mit JDBC (aktuelle Version) zusammen: + +```java +private static void findByUsernameAndAge(String url, String dbUsername, String password, String username, int age) throws SQLException { + try(Connection connection = DriverManager.getConnection(url, dbUsername, password)) { + String query = "SELECT * FROM user WHERE username = ? and age > ?"; + + try(PreparedStatement statement = connection.prepareStatement(query)){ + statement.setString(1, username); + statement.setInt(2, age); + + ResultSet resultSet = statement.executeQuery(); + + while(resultSet.next()){ + String data = resultSet.getInt(1) + ":" + resultSet.getString(2); + System.out.println(data); + } + } + } +} +``` + +--- diff --git a/content/2025/docs/02_java/11_java-jdbc/images/close_statement_and_connection.png b/content/2025/docs/02_java/11_java-jdbc/04_jdbc/images/close_statement_and_connection.png similarity index 100% rename from content/2025/docs/02_java/11_java-jdbc/images/close_statement_and_connection.png rename to content/2025/docs/02_java/11_java-jdbc/04_jdbc/images/close_statement_and_connection.png diff --git a/content/2025/docs/02_java/11_java-jdbc/images/connection_configuration.png b/content/2025/docs/02_java/11_java-jdbc/04_jdbc/images/connection_configuration.png similarity index 100% rename from content/2025/docs/02_java/11_java-jdbc/images/connection_configuration.png rename to content/2025/docs/02_java/11_java-jdbc/04_jdbc/images/connection_configuration.png diff --git a/content/2025/docs/02_java/11_java-jdbc/images/connection_creation.png b/content/2025/docs/02_java/11_java-jdbc/04_jdbc/images/connection_creation.png similarity index 100% rename from content/2025/docs/02_java/11_java-jdbc/images/connection_creation.png rename to content/2025/docs/02_java/11_java-jdbc/04_jdbc/images/connection_creation.png diff --git a/content/2025/docs/02_java/11_java-jdbc/images/create_table_query.png b/content/2025/docs/02_java/11_java-jdbc/04_jdbc/images/create_table_query.png similarity index 100% rename from content/2025/docs/02_java/11_java-jdbc/images/create_table_query.png rename to content/2025/docs/02_java/11_java-jdbc/04_jdbc/images/create_table_query.png diff --git a/content/2025/docs/02_java/11_java-jdbc/images/dependency.png b/content/2025/docs/02_java/11_java-jdbc/04_jdbc/images/dependency.png similarity index 100% rename from content/2025/docs/02_java/11_java-jdbc/images/dependency.png rename to content/2025/docs/02_java/11_java-jdbc/04_jdbc/images/dependency.png diff --git a/content/2025/docs/02_java/11_java-jdbc/images/driver_registration.png b/content/2025/docs/02_java/11_java-jdbc/04_jdbc/images/driver_registration.png similarity index 100% rename from content/2025/docs/02_java/11_java-jdbc/images/driver_registration.png rename to content/2025/docs/02_java/11_java-jdbc/04_jdbc/images/driver_registration.png diff --git a/content/2025/docs/02_java/11_java-jdbc/images/jdbc-architektur.png b/content/2025/docs/02_java/11_java-jdbc/04_jdbc/images/jdbc-architektur.png similarity index 100% rename from content/2025/docs/02_java/11_java-jdbc/images/jdbc-architektur.png rename to content/2025/docs/02_java/11_java-jdbc/04_jdbc/images/jdbc-architektur.png diff --git a/content/2025/docs/02_java/11_java-jdbc/images/prepared_statement.png b/content/2025/docs/02_java/11_java-jdbc/04_jdbc/images/prepared_statement.png similarity index 100% rename from content/2025/docs/02_java/11_java-jdbc/images/prepared_statement.png rename to content/2025/docs/02_java/11_java-jdbc/04_jdbc/images/prepared_statement.png diff --git a/content/2025/docs/02_java/11_java-jdbc/images/query_with_placeholder.png b/content/2025/docs/02_java/11_java-jdbc/04_jdbc/images/query_with_placeholder.png similarity index 100% rename from content/2025/docs/02_java/11_java-jdbc/images/query_with_placeholder.png rename to content/2025/docs/02_java/11_java-jdbc/04_jdbc/images/query_with_placeholder.png diff --git a/content/2025/docs/02_java/11_java-jdbc/images/resultset_iteration.png b/content/2025/docs/02_java/11_java-jdbc/04_jdbc/images/resultset_iteration.png similarity index 100% rename from content/2025/docs/02_java/11_java-jdbc/images/resultset_iteration.png rename to content/2025/docs/02_java/11_java-jdbc/04_jdbc/images/resultset_iteration.png diff --git a/content/2025/docs/02_java/11_java-jdbc/images/select_query_no_params.png b/content/2025/docs/02_java/11_java-jdbc/04_jdbc/images/select_query_no_params.png similarity index 100% rename from content/2025/docs/02_java/11_java-jdbc/images/select_query_no_params.png rename to content/2025/docs/02_java/11_java-jdbc/04_jdbc/images/select_query_no_params.png diff --git a/content/2025/docs/02_java/11_java-jdbc/images/statement_exectution.png b/content/2025/docs/02_java/11_java-jdbc/04_jdbc/images/statement_exectution.png similarity index 100% rename from content/2025/docs/02_java/11_java-jdbc/images/statement_exectution.png rename to content/2025/docs/02_java/11_java-jdbc/04_jdbc/images/statement_exectution.png diff --git a/content/2025/docs/99_shared/database/04_datenbank-design/_index.md b/content/2025/docs/02_java/11_java-jdbc/05_datenbank-design/_index.md similarity index 97% rename from content/2025/docs/99_shared/database/04_datenbank-design/_index.md rename to content/2025/docs/02_java/11_java-jdbc/05_datenbank-design/_index.md index a57f1bf6f0..c9db4cf872 100644 --- a/content/2025/docs/99_shared/database/04_datenbank-design/_index.md +++ b/content/2025/docs/02_java/11_java-jdbc/05_datenbank-design/_index.md @@ -1,7 +1,7 @@ --- title: "Datenbank Design" linkTitle: "Datenbank Design" -weight: 4 +weight: 5 --- ## Ziele @@ -305,10 +305,11 @@ Nun entspricht die Datenbank der dritten Normalform (3NF), da **alle Nicht-Schl Für den Einstieg reichen die ersten drei Normalformen meist aus. Höhere Normalformen wie die **Boyce-Codd-Normalform (BCNF)** oder die **vierte Normalform (4NF)** sind komplexer und werden in speziellen Anwendungsfällen eingesetzt. -## Datenbankdesign +## Datenbankdesign (Optional) In diesem Abschnitt betrachten wir die beiden Begriffe **ERM (Entity-Relationship-Modell)** und **ERD (Entity-Relationship-Diagramm)**. Es ist wichtig, den Unterschied zwischen den beiden zu verstehen. +Entity Relationship Diagramme sowie Modelle werden oft benutzt und es ist wichtig diese erstellen zu können. Für die Labs werden diese allerdings nicht zwingend gebraucht. ### Entity-Relationship-Modell (ERM) @@ -438,4 +439,6 @@ Diese zusätzliche Tabelle ermöglicht eine **eindeutige Zuordnung** zwischen B Die Kardinalität ist ein wichtiger Bestandteil des **Entity-Relationship-Modells (ERM)** und beschreibt, wie Entitäten miteinander verknüpft sind. Das Verständnis der Kardinalitäten hilft, eine **optimale Datenbankstruktur** zu entwickeln, die **Redundanzen vermeidet** und **Datenkonsistenz sicherstellt**. -![task1](/images/task.png) Jetzt bist du dran. Löse bitte die [Aufgaben zu Datenbanken](../../../../labs/99_shared/database/) in den Labs. +![task1](/images/task.png) Jetzt bist du dran. Löse bitte diese [Aufgabe](../../../../labs/02_java/11_java-jdbc/01_Jdbc_Exercises) in den Labs. + +![task1](/images/task.png) Jetzt bist du dran. Hier geht es zu einer Challange bezüglich Datenbank Design [Aufgaben zu Datenbanken](../../../../challenges/database/) . diff --git a/content/2025/docs/99_shared/database/04_datenbank-design/images/buch-erd.drawio b/content/2025/docs/02_java/11_java-jdbc/05_datenbank-design/images/buch-erd.drawio similarity index 100% rename from content/2025/docs/99_shared/database/04_datenbank-design/images/buch-erd.drawio rename to content/2025/docs/02_java/11_java-jdbc/05_datenbank-design/images/buch-erd.drawio diff --git a/content/2025/docs/99_shared/database/04_datenbank-design/images/buch-erd.png b/content/2025/docs/02_java/11_java-jdbc/05_datenbank-design/images/buch-erd.png similarity index 100% rename from content/2025/docs/99_shared/database/04_datenbank-design/images/buch-erd.png rename to content/2025/docs/02_java/11_java-jdbc/05_datenbank-design/images/buch-erd.png diff --git a/content/2025/docs/02_java/11_java-jdbc/_index.md b/content/2025/docs/02_java/11_java-jdbc/_index.md index b3845baf51..024ac1b291 100644 --- a/content/2025/docs/02_java/11_java-jdbc/_index.md +++ b/content/2025/docs/02_java/11_java-jdbc/_index.md @@ -6,217 +6,4 @@ description: > Modul #J7 - JDBC --- -#### Ziele - -- Ich weiss was die JDBC-Schnittstelle ist und wofür sie benutzt wird -- Ich weiss was JDBC-Treiber sind und warum sie benötigt werden -- Ich kenne die wichtigsten Interfaces der JDBC-Schnittstelle -- Ich weiss wie parametrisierte SQL-Anweisungen verwendet werden können -- Ich kann eine Datenbank-Verbindung aus einer Java-Anwendung herstellen -- Ich kann CRUD-Operationen aus einer Java-Anwendung ausführen - -## Einleitung - -Die meisten Apps und Webseiten, welche wir heutzutage fast täglich verwenden, dienen lediglich der Datenverarbeitung. -Sobald du ein Bild deines Freundes likest, den Fahrplan abrufst oder eine neue Tastatur bestellst, -es werden immer Daten gelesen, geschrieben, bearbeitet oder gelöscht. -Es gibt Frameworks (darunter z.B. Spring), welche die Verbindung zu Datenbanken verwalten und die sog. -"Boiler-Plate"-Details dazu von den Entwicklern verbergen. Diese Frameworks bieten auch einfache -Interaktion mit der Datenbank z.B. im Form von CRUD-Operationen. -Durch das Verwenden solcher Frameworks kann auf "Boiler-Plate" Code verzichtet werden. -Die Entwicklung von Business-Logik ist somit von infrastrukturellen Details getrennt. - -Es gibt jedoch Situationen, wo solche Frameworks nicht benutzt werden können oder man muss bestimmte -Aktivitäten, welche diese Frameworks out-of-the-box anbieten, anders gestalten. -In solchen Situationen kann die JDBC-Bibliothek von Java verwendet werden. - -## Was ist JDBC - -JDBC ist eine Schnittstelle, welche dafür benutzt wird, um aus einer Java Anwendung eine Verbindung -zu einer Datenbank herzustellen und Queries auf den Daten darin (z.B. lesen oder bearbeiten) ausführen zu können. -Die JDBC-Schnittstelle stellt eine Datenbank unabhängige API zur Verfügung und trägt damit dazu bei, dass -die Anwendung nicht an einer bestimmten Datenbank stark gekoppelt ist (sprich, die Anwendung muss die -unterliegende Datenbank, theoretisch, gar nicht kennen). - -Um die eigentliche Verbindung mit der Datenbank zu ermöglichen, werden JDBC-Treiber eingesetzt. -Ein JDBC-Treiber ist eine Software-Komponente, welche die Zugriffstechnik für eine bestimmte Datenbank -(z.B. Oracle, Postgres usw.) kennt und somit in der Lage ist, Anfragen an der Datenbank weiterzuleiten -wie auch die Ergebnisse zurückzuliefern. Solche Treiber können umgetauscht werden, wenn die unterliegende Datenbank -geändert werden soll, ohne dass es zu einer Anpassung in der Anwendung-Code kommt. - -Eine vereinfachte Darstellung der JDBC-Architektur sieht also wie folgt aus: - -![](./images/jdbc-architektur.png "JDBC-Architektur") - -## JDBC in der Praxis - -Die Klassen und Interfaces der JDBC-Schnittstelle befinden sich im Paket "java.sql". -Entsprechend reicht ein "import"-Statement um mit diesen Klassen/Interfaces arbeiten zu können. -Die JDBC-Treiber sind jedoch separate und proprietäre Komponenten, welche zur Laufzeit vorhanden sein müssen -damit der Classloader sie wirklich laden kann. Bei einem Maven-Projekt wird dies mittels einer Maven-Abhängigkeit -erledigt. Ansonsten muss die Jar-Datei des Treibers auf dem Klassenpfad vorhanden sein. - -Die ersten Schritte bei der Arbeit mit der JDBC-Schnittstelle beinhalten die nötige Konfiguration um die -Verbindung zur Datenbank herstellen zu können. Anschliessend können Abfragen und sonstige -SQL-Anweisungen ausgeführt werden. - -Die folgenden Abschnitte zeigen die nötigen Schritte anhand von Beispielen. -Diese Beispiele wurden in einem Maven-Projekt ohne das Spring-Framework erstellt. - -### Maven-Dependency - -Sobald die gewünschte Datenbank festgelegt wurde, kann der dazugehörende JDBC-Treiber als -Maven-Abhängigkeit herangezogen werden. - -Das folgende Beispiel zeigt eine Abhängigkeit zu einem MySql-Treiber: - -![dependency.png](./images/dependency.png) - -Die restlichen Schritte erfolgen im Java-Code. - -### Treiber laden/registrieren - -**Hinweis** -Dieser Schritt wird nur bei JDBC-Versionen benötigt, welche älter sind als die Version 4! -Bei neueren Versionen, werden alle Treiber geladen, welche auf dem Klassenpfad gefunden werden und -somit braucht es diesen Schritt nicht mehr. - -Mit der statischen Methode _forName_ von _Class_ wird die Klasse _Driver_ geladen. -Hier geht es um die Datenbank spezifischer Treiber, welche es der Anwendung den Datenzugriff auf der -gewünschten Datenbank ermöglicht. - -Im folgenden Beispiel wird der JDBC-Treiber für MySql registriert: - -![](./images/driver_registration.png) - -### Datenbankverbindung herstellen - -Der Zugriff auf einer Datenbank erfordert die Konfiguration folgender Elemente: - -- url: eine JDBC-URL, welche auf die gewünschte Datenquelle zeigt -- Benutzername: einer, für den Zugriff auf die Datenbank, autorisierter Benutzer -- Passwort: das Passwort des autorisierten Benutzers, womit er sich authentifizieren kann - -![](./images/connection_configuration.png) - -Die Konfiguration wird hier einfachheitshalber als Klartext im Code geschrieben. -Selbstverständlich dürfen vertrauliche Informationen wie z.B. das Passwort nicht als Klartext im Code stehen. -Für diesen Zweck, wie auch für die Konfiguration unterschiedlichen Umgebungen, eignen sich System- -oder Umgebungsvariablen (mit oder ohne Verschlüsselung) besser. - -Die obige Konfiguration kann nun für die Herstellung einer Datenbankverbindung verwendet werden. -Dazu wird die statische Methode _getConnection_ der Klasse _DriverManager_ verwendet: - -![](./images/connection_creation.png) - -Ab diesem Punkt repräsentiert das Connection-Objekt die Verbindung zur Datenbank. - -### SQL-Anweisung vorbereiten - -Die SQL-Anweisung kann als String vor der Ausführung vorbereitet werden: - -![](./images/select_query_no_params.png) - -Wenn eine IDE wie z.B. IntelliJ verwendet wird und eine Datasource mit der richtigen Datenbank definiert wird, -erkennt die IDE, dass es sich um eine SQL-Anweisung handelt und liefert entsprechend -Vorschläge und formatiert die Anweisung richtig und gut leserlich. - -Die obige SQL-Anweisung dient dazu alle Daten aus einer bestehenden Tabelle zu Lesen. -SQL-Anweisungen können aber auch Operationen wie Tabellen erstellen, Daten einfügen, löschen oder -bearbeiten usw. beinhalten. - -Als Beispiel, erstellt die folgende SQL-Anweisung eine Tabelle - falls diese noch nicht existiert - -mit ein paar gewünschten Attributen (Spalten): - -![](./images/create_table_query.png) - -### SQL-Anweisung ausführen - -Um SQL-Anweisungen ausführen zu können wird zunächst ein Statement-Objekt aus dem vorhandenen -Connection-Objekt erzeugt. Dieses Statement-Objekt wird verwendet, um die SQL-Anweisung an die -Datenbank zu richten. Dazu wird eine der _execute_ Methoden des Statement-Objektes verwendet. - -Im folgenden Beispiel wird die ein Statement-Objekt mithilfe des Connection-Objekt erstellt. -Danach wird die Methode _executeQuery_ verwendet, welche eine SQL-Anweisung als -Parameter entgegennimmt, diese ausführt und eine Referenz auf die Ergebnismenge (sog. ResultSet) zurückliefert: - -![](./images/statement_exectution.png) - -### Parametrisierte SQL-Anweisungen - -Bis jetzt haben wir SQL-Anweisungen ausgeführt, welche keine Einschränkungen beinhaltet haben. -Oft werden jedoch SQL-Anweisungen mit bestimmten Kriterien oder Einschränkungen benötigt damit die -zurückgelieferten Daten anhand dieser Kriterien gefiltert werden können. -In solchen Situationen wird der SQL "WHERE"-Befehl benutzt. Zum Beispiel: - -_SELECT \* FROM user WHERE username = 'gandalf' and age > 20;_ - -In diesem Beispiel, werden nur Einträge zurückgeliefert, welche die Kriterien _username = 'gandalf'_ -und _age > 20_ erfüllen. -Wenn nun dieselbe Anweisung mehrmals ausgeführt werden soll aber jeweils mit anderen Parameter (also mit unterschiedlichen _username_ und _age_), -wird die Anweisung mit Platzhaltern wie folgt geschrieben (ein Fragezeichen dient als einen Platzhalter): - -![](./images/query_with_placeholder.png) - -Für das eigentliche Ausführen der Anweisung müssen alle Platzhalter durch konkrete Werte ersetzt werden. -Dazu wird ein _PreparedStatement_ verwendet, welche es erlaubt, alle Platzhalter anhand ihrer Position (beginnend mit 1) -mittels _setXXX_ Methoden anzusprechen und mit den konkreten Werten zu ersetzen. -Anschliessend, kann auch hier eine der _executeXXX_ Methoden verwendet werden, um die Anweisung auszuführen: - -![](./images/prepared_statement.png) - -### Rückgabewerte verarbeiten - -Bei der Ausführung von bestimmten SQL-Anweisungen (z.B. bei SELECT Operationen), wird eine Ergebnismenge zurückgeliefert. -Ein ResultSet repräsentiert einen sog. _Cursor_ auf diese Ergebnismenge. -Die Methoden des ResultSets, bewegen den Cursor (je nach Art des Cursors) vorwärts, rückwärts, zur ersten oder zur letzten Position usw. -Somit kann über die gesamte Ergebnismenge, Zeile bei Zeile, iteriert werden, um die Werte zu lesen. - -![](./images/resultset_iteration.png) - -Im obigen Beispiel wird die _next_ Methode verwendet um den Cursor jeweils eine Zeile vorwärtszubewegen. -Aus jeder Zeile werden aus dem ResultSet mittels _getXXX_ Methoden (XXX steht für den Typ des Wertes) -die Werte, welche in dieser aktuellen Zeile vorhanden sind. -Die _getXXX_ Methoden, bekommen als Parameter entweder die Spaltenposition oder den Spaltennamen, welche gelesen werden soll. -Bei einer Spaltenposition hat die erste zurückgelieferte Spalte die Position 1. -Hinter der letzten Zeile liefert die _next_ Methode _false_ zurück und somit wird die Schleife beendet, -nachdem alle Zeilen bearbeitet worden sind. - -### Verbindungen schliessen - -Objekte der Typ _Connection_, _Statement_ oder auch _PreparedStatement_ sind sog. Ressourcen. -Solche Ressourcen müssen nach Verbrauch wieder explizit geschlossen werden: - -![](./images/close_statement_and_connection.png) - -Wenn diese Ressourcen innerhalb eines try-with-resources Befehls erstellt werden, entfällt diese -explizite Schliessung der Ressourcen. -Die Arbeit mit try-with-resources ist immer vorzuziehen, wenn es um Closable-Ressourcen geht. - -### Zusammenfassung - -Die folgende Beispiel-Methode fasst die oben erwähnten Arbeitsschritte mit JDBC (aktuelle Version) zusammen: - -```java -private static void findByUsernameAndAge(String url, String dbUsername, String password, String username, int age) throws SQLException { - try(Connection connection = DriverManager.getConnection(url, dbUsername, password)) { - String query = "SELECT * FROM user WHERE username = ? and age > ?"; - - try(PreparedStatement statement = connection.prepareStatement(query)){ - statement.setString(1, username); - statement.setInt(2, age); - - ResultSet resultSet = statement.executeQuery(); - - while(resultSet.next()){ - String data = resultSet.getInt(1) + ":" + resultSet.getString(2); - System.out.println(data); - } - } - } -} -``` - ---- - -![task1](/images/task.png) Jetzt bist du dran. Löse bitte diese [Aufgabe](../../../labs/02_java/11_java-jdbc/01_Jdbc_Exercises) in den Labs. +In diesem Modul wird der Aufbau und der Umgang mit Datenbanken behandelt. Aussserdem wird mit JDBC angeschaut wie die Verbindung zwischen Datenbank und einem Java Backend erstellt wird. diff --git a/content/2025/docs/99_shared/database/_index.md b/content/2025/docs/99_shared/database/_index.md deleted file mode 100644 index 29a458f9e5..0000000000 --- a/content/2025/docs/99_shared/database/_index.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: "Datenbanken" -weight: 10 -description: > - Grundlagen für die Verwendung von Datenbanken ---- - -## Inhalt - -In diesem Kapitel lernst du, wofür eine Datenbank ist und wie du sie benutzen kannst. Dir werden die Datentypen und -verschiedenen Statements näher gebracht, um diese später selbstständig verwenden zu können. Ziel ist auch, dass du -Datenbankdiagramme verstehen und erstellen kannst. From ba9083517434280355421d102ea3ca3c546cb4d5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sch=C3=BCrch=20Michel=20Sven=20=28IT-PTR-CEN1-BDE25=29?= Date: Wed, 4 Mar 2026 15:42:23 +0100 Subject: [PATCH 02/18] updated links --- .../02_java/11_java-jdbc/01_Database_Introduction/_index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/2025/docs/02_java/11_java-jdbc/01_Database_Introduction/_index.md b/content/2025/docs/02_java/11_java-jdbc/01_Database_Introduction/_index.md index 6fa92c74bb..dc99a69ca4 100644 --- a/content/2025/docs/02_java/11_java-jdbc/01_Database_Introduction/_index.md +++ b/content/2025/docs/02_java/11_java-jdbc/01_Database_Introduction/_index.md @@ -67,7 +67,7 @@ Um sicherzustellen, dass SQL in verschiedenen Datenbanksystemen wie **MariaDB, P Allerdings implementieren viele Datenbanksysteme zusätzliche SQL-Erweiterungen, die nicht im ANSI-Standard enthalten sind. Deshalb kann sich die SQL-Syntax je nach System leicht unterscheiden. Im IT-Ninjas werden wir hauptsächlich mit **MariaDB** arbeiten. -Mehr Informationen zur SQL-Syntax findest du im Kapitel [SQL Syntax](../02_sql-syntax/). +Mehr Informationen zur SQL-Syntax findest du im Kapitel [SQL Syntax](../02_sql-basics/). #### SQL Datentypen From df976223c771f788b5db79c3565bf814b8d78064 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sch=C3=BCrch=20Michel=20Sven=20=28IT-PTR-CEN1-BDE25=29?= Date: Thu, 5 Mar 2026 11:25:53 +0100 Subject: [PATCH 03/18] added examples --- .../11_java-jdbc/02_sql-basics/_index.md | 46 ++++++++++++++++--- 1 file changed, 40 insertions(+), 6 deletions(-) diff --git a/content/2025/docs/02_java/11_java-jdbc/02_sql-basics/_index.md b/content/2025/docs/02_java/11_java-jdbc/02_sql-basics/_index.md index d71c0dde24..37600d1413 100644 --- a/content/2025/docs/02_java/11_java-jdbc/02_sql-basics/_index.md +++ b/content/2025/docs/02_java/11_java-jdbc/02_sql-basics/_index.md @@ -449,10 +449,44 @@ Funktionen, die verwendet werden, um zusammengefasste Informationen aus großen Dadurch wird es einfacher, die Daten zu analysieren und Muster oder Trends zu erkennen. Dazu gehören unter anderem: -- Count -- Max/Min -- Sum -- Avg -- Group By +### Count -Wie diese angewendet werden findest du hier: https://mariadb.com/docs/server/reference/sql-functions/aggregate-functions +Die Aggregation Count zählt wie viele Resultate das beim Query zurückgegeben werden. + +```sql +SELECT COUNT(*), COUNT(beruf) FROM person; +``` + +### Max/Min + +Die Aggregationen Max und Min sind logischerweise zum Finden des grössten und kleinsten Wertes. + +```sql +SELECT MAX(alter), MIN(alter) FROM person; +``` + +### Sum + +Sum summiert die Werte einer Spalte. Im Gegensatz zu den vorherigen Aggregationen funktioniert Sum nur mit Zahlenwerten. + +```sql +SELECT SUM(alter) FROM person; +``` + +### Avg + +Um den Durchschnitt von Zahlen zu finden wird die Funktion AVG verwendet. + +```sql +SELECT AVG(alter) FROM person; +``` + +### Group By + +Mit Group By können Tupel mit gleichen Werten bei einem Attribut zusammen geführt werden, um beispielsweise in einem Count gezählt zu werden. + +```sql +SELECT COUNT(*), beruf FROM person GROUP BY beruf; +``` + +- Wie diese angewendet werden findest du hier: https://mariadb.com/docs/server/reference/sql-functions/aggregate-functions From f99f433c96c783417adb5745c932c40233c374e8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sch=C3=BCrch=20Michel=20Sven=20=28IT-PTR-CEN1-BDE25=29?= Date: Mon, 16 Mar 2026 15:38:29 +0100 Subject: [PATCH 04/18] fixed link --- content/2025/challenges/java/java-ood/02_Vehicles/_index.md | 2 -- .../2025/docs/02_java/{10_java-jdbc => 11_java-jdbc}/_index.md | 0 2 files changed, 2 deletions(-) rename content/2025/docs/02_java/{10_java-jdbc => 11_java-jdbc}/_index.md (100%) diff --git a/content/2025/challenges/java/java-ood/02_Vehicles/_index.md b/content/2025/challenges/java/java-ood/02_Vehicles/_index.md index fd3e9ce1b4..4620a38ffe 100644 --- a/content/2025/challenges/java/java-ood/02_Vehicles/_index.md +++ b/content/2025/challenges/java/java-ood/02_Vehicles/_index.md @@ -3,8 +3,6 @@ title: "Objektorientiertes Design Challenge - Vehicles" linkTitle: "Objektorientiertes Design Challenge - Vehicles" type: docs weight: 4 -description: > - Challenge zu Modul #J3 - Vehicles --- Entwirf ein Fahrzeugverwaltungssystem für ein Autohaus. diff --git a/content/2025/docs/02_java/10_java-jdbc/_index.md b/content/2025/docs/02_java/11_java-jdbc/_index.md similarity index 100% rename from content/2025/docs/02_java/10_java-jdbc/_index.md rename to content/2025/docs/02_java/11_java-jdbc/_index.md From 1c86fb7ad02b1e9fcb325d9dd004180d0dd308d6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sch=C3=BCrch=20Michel=20Sven=20=28IT-PTR-CEN1-BDE25=29?= Date: Wed, 18 Mar 2026 13:10:44 +0100 Subject: [PATCH 05/18] renamed package --- .../01_Database_Introduction/_index.md | 0 .../images/begriffe-relationaler-datenbanken.png | Bin .../images/beispiel-bank.drawio | 0 .../images/beispiel-bank.png | Bin .../images/nosql-databases.jpg | Bin .../02_sql-basics/_index.md | 0 .../02_sql-basics/images/full-join.png | Bin .../02_sql-basics/images/inner-join.png | Bin .../02_sql-basics/images/left-join.png | Bin .../02_sql-basics/images/right-join.png | Bin .../03_constraints/_index.md | 0 .../04_jdbc/_index.md | 0 .../05_datenbank-design/_index.md | 0 .../05_datenbank-design/images/buch-erd.drawio | 0 .../05_datenbank-design/images/buch-erd.png | Bin .../{11_java-jdbc => 10_java-jdbc}/_index.md | 0 16 files changed, 0 insertions(+), 0 deletions(-) rename content/2025/docs/02_java/{11_java-jdbc => 10_java-jdbc}/01_Database_Introduction/_index.md (100%) rename content/2025/docs/02_java/{11_java-jdbc => 10_java-jdbc}/01_Database_Introduction/images/begriffe-relationaler-datenbanken.png (100%) rename content/2025/docs/02_java/{11_java-jdbc => 10_java-jdbc}/01_Database_Introduction/images/beispiel-bank.drawio (100%) rename content/2025/docs/02_java/{11_java-jdbc => 10_java-jdbc}/01_Database_Introduction/images/beispiel-bank.png (100%) rename content/2025/docs/02_java/{11_java-jdbc => 10_java-jdbc}/01_Database_Introduction/images/nosql-databases.jpg (100%) rename content/2025/docs/02_java/{11_java-jdbc => 10_java-jdbc}/02_sql-basics/_index.md (100%) rename content/2025/docs/02_java/{11_java-jdbc => 10_java-jdbc}/02_sql-basics/images/full-join.png (100%) rename content/2025/docs/02_java/{11_java-jdbc => 10_java-jdbc}/02_sql-basics/images/inner-join.png (100%) rename content/2025/docs/02_java/{11_java-jdbc => 10_java-jdbc}/02_sql-basics/images/left-join.png (100%) rename content/2025/docs/02_java/{11_java-jdbc => 10_java-jdbc}/02_sql-basics/images/right-join.png (100%) rename content/2025/docs/02_java/{11_java-jdbc => 10_java-jdbc}/03_constraints/_index.md (100%) rename content/2025/docs/02_java/{11_java-jdbc => 10_java-jdbc}/04_jdbc/_index.md (100%) rename content/2025/docs/02_java/{11_java-jdbc => 10_java-jdbc}/05_datenbank-design/_index.md (100%) rename content/2025/docs/02_java/{11_java-jdbc => 10_java-jdbc}/05_datenbank-design/images/buch-erd.drawio (100%) rename content/2025/docs/02_java/{11_java-jdbc => 10_java-jdbc}/05_datenbank-design/images/buch-erd.png (100%) rename content/2025/docs/02_java/{11_java-jdbc => 10_java-jdbc}/_index.md (100%) diff --git a/content/2025/docs/02_java/11_java-jdbc/01_Database_Introduction/_index.md b/content/2025/docs/02_java/10_java-jdbc/01_Database_Introduction/_index.md similarity index 100% rename from content/2025/docs/02_java/11_java-jdbc/01_Database_Introduction/_index.md rename to content/2025/docs/02_java/10_java-jdbc/01_Database_Introduction/_index.md diff --git a/content/2025/docs/02_java/11_java-jdbc/01_Database_Introduction/images/begriffe-relationaler-datenbanken.png b/content/2025/docs/02_java/10_java-jdbc/01_Database_Introduction/images/begriffe-relationaler-datenbanken.png similarity index 100% rename from content/2025/docs/02_java/11_java-jdbc/01_Database_Introduction/images/begriffe-relationaler-datenbanken.png rename to content/2025/docs/02_java/10_java-jdbc/01_Database_Introduction/images/begriffe-relationaler-datenbanken.png diff --git a/content/2025/docs/02_java/11_java-jdbc/01_Database_Introduction/images/beispiel-bank.drawio b/content/2025/docs/02_java/10_java-jdbc/01_Database_Introduction/images/beispiel-bank.drawio similarity index 100% rename from content/2025/docs/02_java/11_java-jdbc/01_Database_Introduction/images/beispiel-bank.drawio rename to content/2025/docs/02_java/10_java-jdbc/01_Database_Introduction/images/beispiel-bank.drawio diff --git a/content/2025/docs/02_java/11_java-jdbc/01_Database_Introduction/images/beispiel-bank.png b/content/2025/docs/02_java/10_java-jdbc/01_Database_Introduction/images/beispiel-bank.png similarity index 100% rename from content/2025/docs/02_java/11_java-jdbc/01_Database_Introduction/images/beispiel-bank.png rename to content/2025/docs/02_java/10_java-jdbc/01_Database_Introduction/images/beispiel-bank.png diff --git a/content/2025/docs/02_java/11_java-jdbc/01_Database_Introduction/images/nosql-databases.jpg b/content/2025/docs/02_java/10_java-jdbc/01_Database_Introduction/images/nosql-databases.jpg similarity index 100% rename from content/2025/docs/02_java/11_java-jdbc/01_Database_Introduction/images/nosql-databases.jpg rename to content/2025/docs/02_java/10_java-jdbc/01_Database_Introduction/images/nosql-databases.jpg diff --git a/content/2025/docs/02_java/11_java-jdbc/02_sql-basics/_index.md b/content/2025/docs/02_java/10_java-jdbc/02_sql-basics/_index.md similarity index 100% rename from content/2025/docs/02_java/11_java-jdbc/02_sql-basics/_index.md rename to content/2025/docs/02_java/10_java-jdbc/02_sql-basics/_index.md diff --git a/content/2025/docs/02_java/11_java-jdbc/02_sql-basics/images/full-join.png b/content/2025/docs/02_java/10_java-jdbc/02_sql-basics/images/full-join.png similarity index 100% rename from content/2025/docs/02_java/11_java-jdbc/02_sql-basics/images/full-join.png rename to content/2025/docs/02_java/10_java-jdbc/02_sql-basics/images/full-join.png diff --git a/content/2025/docs/02_java/11_java-jdbc/02_sql-basics/images/inner-join.png b/content/2025/docs/02_java/10_java-jdbc/02_sql-basics/images/inner-join.png similarity index 100% rename from content/2025/docs/02_java/11_java-jdbc/02_sql-basics/images/inner-join.png rename to content/2025/docs/02_java/10_java-jdbc/02_sql-basics/images/inner-join.png diff --git a/content/2025/docs/02_java/11_java-jdbc/02_sql-basics/images/left-join.png b/content/2025/docs/02_java/10_java-jdbc/02_sql-basics/images/left-join.png similarity index 100% rename from content/2025/docs/02_java/11_java-jdbc/02_sql-basics/images/left-join.png rename to content/2025/docs/02_java/10_java-jdbc/02_sql-basics/images/left-join.png diff --git a/content/2025/docs/02_java/11_java-jdbc/02_sql-basics/images/right-join.png b/content/2025/docs/02_java/10_java-jdbc/02_sql-basics/images/right-join.png similarity index 100% rename from content/2025/docs/02_java/11_java-jdbc/02_sql-basics/images/right-join.png rename to content/2025/docs/02_java/10_java-jdbc/02_sql-basics/images/right-join.png diff --git a/content/2025/docs/02_java/11_java-jdbc/03_constraints/_index.md b/content/2025/docs/02_java/10_java-jdbc/03_constraints/_index.md similarity index 100% rename from content/2025/docs/02_java/11_java-jdbc/03_constraints/_index.md rename to content/2025/docs/02_java/10_java-jdbc/03_constraints/_index.md diff --git a/content/2025/docs/02_java/11_java-jdbc/04_jdbc/_index.md b/content/2025/docs/02_java/10_java-jdbc/04_jdbc/_index.md similarity index 100% rename from content/2025/docs/02_java/11_java-jdbc/04_jdbc/_index.md rename to content/2025/docs/02_java/10_java-jdbc/04_jdbc/_index.md diff --git a/content/2025/docs/02_java/11_java-jdbc/05_datenbank-design/_index.md b/content/2025/docs/02_java/10_java-jdbc/05_datenbank-design/_index.md similarity index 100% rename from content/2025/docs/02_java/11_java-jdbc/05_datenbank-design/_index.md rename to content/2025/docs/02_java/10_java-jdbc/05_datenbank-design/_index.md diff --git a/content/2025/docs/02_java/11_java-jdbc/05_datenbank-design/images/buch-erd.drawio b/content/2025/docs/02_java/10_java-jdbc/05_datenbank-design/images/buch-erd.drawio similarity index 100% rename from content/2025/docs/02_java/11_java-jdbc/05_datenbank-design/images/buch-erd.drawio rename to content/2025/docs/02_java/10_java-jdbc/05_datenbank-design/images/buch-erd.drawio diff --git a/content/2025/docs/02_java/11_java-jdbc/05_datenbank-design/images/buch-erd.png b/content/2025/docs/02_java/10_java-jdbc/05_datenbank-design/images/buch-erd.png similarity index 100% rename from content/2025/docs/02_java/11_java-jdbc/05_datenbank-design/images/buch-erd.png rename to content/2025/docs/02_java/10_java-jdbc/05_datenbank-design/images/buch-erd.png diff --git a/content/2025/docs/02_java/11_java-jdbc/_index.md b/content/2025/docs/02_java/10_java-jdbc/_index.md similarity index 100% rename from content/2025/docs/02_java/11_java-jdbc/_index.md rename to content/2025/docs/02_java/10_java-jdbc/_index.md From a9f9c6ba4abbce087dbf58b640501f05a22f3392 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sch=C3=BCrch=20Michel=20Sven=20=28IT-PTR-CEN1-BDE25=29?= Date: Wed, 18 Mar 2026 13:21:38 +0100 Subject: [PATCH 06/18] added missing images --- .../images/close_statement_and_connection.png | Bin 0 -> 4534 bytes .../04_jdbc/images/connection_configuration.png | Bin 0 -> 14038 bytes .../04_jdbc/images/connection_creation.png | Bin 0 -> 10631 bytes .../04_jdbc/images/create_table_query.png | Bin 0 -> 18690 bytes .../10_java-jdbc/04_jdbc/images/dependency.png | Bin 0 -> 21929 bytes .../04_jdbc/images/driver_registration.png | Bin 0 -> 6354 bytes .../04_jdbc/images/jdbc-architektur.png | Bin 0 -> 11112 bytes .../04_jdbc/images/prepared_statement.png | Bin 0 -> 20693 bytes .../04_jdbc/images/query_with_placeholder.png | Bin 0 -> 8641 bytes .../04_jdbc/images/resultset_iteration.png | Bin 0 -> 19433 bytes .../04_jdbc/images/select_query_no_params.png | Bin 0 -> 5989 bytes .../04_jdbc/images/statement_exectution.png | Bin 0 -> 14352 bytes 12 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 content/2025/docs/02_java/10_java-jdbc/04_jdbc/images/close_statement_and_connection.png create mode 100644 content/2025/docs/02_java/10_java-jdbc/04_jdbc/images/connection_configuration.png create mode 100644 content/2025/docs/02_java/10_java-jdbc/04_jdbc/images/connection_creation.png create mode 100644 content/2025/docs/02_java/10_java-jdbc/04_jdbc/images/create_table_query.png create mode 100644 content/2025/docs/02_java/10_java-jdbc/04_jdbc/images/dependency.png create mode 100644 content/2025/docs/02_java/10_java-jdbc/04_jdbc/images/driver_registration.png create mode 100644 content/2025/docs/02_java/10_java-jdbc/04_jdbc/images/jdbc-architektur.png create mode 100644 content/2025/docs/02_java/10_java-jdbc/04_jdbc/images/prepared_statement.png create mode 100644 content/2025/docs/02_java/10_java-jdbc/04_jdbc/images/query_with_placeholder.png create mode 100644 content/2025/docs/02_java/10_java-jdbc/04_jdbc/images/resultset_iteration.png create mode 100644 content/2025/docs/02_java/10_java-jdbc/04_jdbc/images/select_query_no_params.png create mode 100644 content/2025/docs/02_java/10_java-jdbc/04_jdbc/images/statement_exectution.png diff --git a/content/2025/docs/02_java/10_java-jdbc/04_jdbc/images/close_statement_and_connection.png b/content/2025/docs/02_java/10_java-jdbc/04_jdbc/images/close_statement_and_connection.png new file mode 100644 index 0000000000000000000000000000000000000000..f76b612deedddb698e3d65569485de9908fe96ad GIT binary patch literal 4534 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 UV0cBO%>V!Z07*qoM6N<$g4VI?*#H0l literal 0 HcmV?d00001 diff --git a/content/2025/docs/02_java/10_java-jdbc/04_jdbc/images/connection_configuration.png b/content/2025/docs/02_java/10_java-jdbc/04_jdbc/images/connection_configuration.png new file mode 100644 index 0000000000000000000000000000000000000000..d0386f62fa825a745bf4015d401852b237adf2f2 GIT binary patch literal 14038 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 literal 0 HcmV?d00001 diff --git a/content/2025/docs/02_java/10_java-jdbc/04_jdbc/images/dependency.png b/content/2025/docs/02_java/10_java-jdbc/04_jdbc/images/dependency.png new file mode 100644 index 0000000000000000000000000000000000000000..b0b7d49ba7ac378852d644ed71f9d02a4b8c2214 GIT binary patch literal 21929 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 V-kY-*sCd<1)RkdMI7N%V{{q(!J#_#8 literal 0 HcmV?d00001 diff --git a/content/2025/docs/02_java/10_java-jdbc/04_jdbc/images/driver_registration.png b/content/2025/docs/02_java/10_java-jdbc/04_jdbc/images/driver_registration.png new file mode 100644 index 0000000000000000000000000000000000000000..08a9d264300b70760dcea5e33c7fcf682683976b GIT binary patch literal 6354 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 JscQ57zW^;ZI~o80 literal 0 HcmV?d00001 diff --git a/content/2025/docs/02_java/10_java-jdbc/04_jdbc/images/jdbc-architektur.png b/content/2025/docs/02_java/10_java-jdbc/04_jdbc/images/jdbc-architektur.png new file mode 100644 index 0000000000000000000000000000000000000000..3b23b1ba701c89dd004c8fde554a3b9b5c6e7253 GIT binary patch literal 11112 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 literal 0 HcmV?d00001 diff --git a/content/2025/docs/02_java/10_java-jdbc/04_jdbc/images/query_with_placeholder.png b/content/2025/docs/02_java/10_java-jdbc/04_jdbc/images/query_with_placeholder.png new file mode 100644 index 0000000000000000000000000000000000000000..47084b78bfa8bad0b777188f99c147f9cdf12538 GIT binary patch literal 8641 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 literal 0 HcmV?d00001 diff --git a/content/2025/docs/02_java/10_java-jdbc/04_jdbc/images/resultset_iteration.png b/content/2025/docs/02_java/10_java-jdbc/04_jdbc/images/resultset_iteration.png new file mode 100644 index 0000000000000000000000000000000000000000..519795cb3485bed26b2c397d3d5eeb3c3c10911c GIT binary patch literal 19433 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 m`AReoI|h3t57A5%OP8^jDn# literal 0 HcmV?d00001 diff --git a/content/2025/docs/02_java/10_java-jdbc/04_jdbc/images/statement_exectution.png b/content/2025/docs/02_java/10_java-jdbc/04_jdbc/images/statement_exectution.png new file mode 100644 index 0000000000000000000000000000000000000000..edaf55f3a79d261b84d54ff8bf62eda911377cdd GIT binary patch literal 14352 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 literal 0 HcmV?d00001 From ff27f44dee40bb1222213307c1713a493d38d2a6 Mon Sep 17 00:00:00 2001 From: migu890 <50990043+migu890@users.noreply.github.com> Date: Wed, 18 Mar 2026 14:52:20 +0100 Subject: [PATCH 07/18] Update content/2025/docs/02_java/10_java-jdbc/04_jdbc/_index.md Co-authored-by: MasterEvarior --- content/2025/docs/02_java/10_java-jdbc/04_jdbc/_index.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/content/2025/docs/02_java/10_java-jdbc/04_jdbc/_index.md b/content/2025/docs/02_java/10_java-jdbc/04_jdbc/_index.md index a74c8a3cec..e2d9c3a7d6 100644 --- a/content/2025/docs/02_java/10_java-jdbc/04_jdbc/_index.md +++ b/content/2025/docs/02_java/10_java-jdbc/04_jdbc/_index.md @@ -160,7 +160,10 @@ Für das eigentliche Ausführen der Anweisung müssen alle Platzhalter durch kon Dazu wird ein _PreparedStatement_ verwendet, welche es erlaubt, alle Platzhalter anhand ihrer Position (beginnend mit 1) mittels _setXXX_ Methoden anzusprechen und mit den konkreten Werten zu ersetzen. Anschliessend, kann auch hier eine der _executeXXX_ Methoden verwendet werden, um die Anweisung auszuführen: - +Für das eigentliche Ausführen der Anweisung müssen alle Platzhalter durch konkrete Werte ersetzt werden. +Dazu wird ein `PreparedStatement` verwendet, welche es erlaubt, alle Platzhalter anhand ihrer Position (beginnend mit 1) +mittels `setXXX` Methoden anzusprechen und mit den konkreten Werten zu ersetzen. +Anschliessend, kann auch hier eine der `executeXXX` Methoden verwendet werden, um die Anweisung auszuführen: ![](images/prepared_statement.png) ### Rückgabewerte verarbeiten From 714de29308c02476199e96e8a4ab49e5dfe211d0 Mon Sep 17 00:00:00 2001 From: migu890 <50990043+migu890@users.noreply.github.com> Date: Wed, 18 Mar 2026 14:52:54 +0100 Subject: [PATCH 08/18] Update content/2025/docs/02_java/10_java-jdbc/04_jdbc/_index.md Co-authored-by: MasterEvarior --- content/2025/docs/02_java/10_java-jdbc/04_jdbc/_index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/2025/docs/02_java/10_java-jdbc/04_jdbc/_index.md b/content/2025/docs/02_java/10_java-jdbc/04_jdbc/_index.md index e2d9c3a7d6..9206103744 100644 --- a/content/2025/docs/02_java/10_java-jdbc/04_jdbc/_index.md +++ b/content/2025/docs/02_java/10_java-jdbc/04_jdbc/_index.md @@ -185,7 +185,7 @@ nachdem alle Zeilen bearbeitet worden sind. ### Verbindungen schliessen -Objekte der Typ _Connection_, _Statement_ oder auch _PreparedStatement_ sind sog. Ressourcen. +Objekte der Typ `Connection`, `Statement` oder auch `PreparedStatement` sind sog. Ressourcen. Solche Ressourcen müssen nach Verbrauch wieder explizit geschlossen werden: ![](images/close_statement_and_connection.png) From 47791f03db5aeb9b3ce0731ca2a4ac283de20219 Mon Sep 17 00:00:00 2001 From: migu890 <50990043+migu890@users.noreply.github.com> Date: Wed, 18 Mar 2026 14:53:14 +0100 Subject: [PATCH 09/18] Update content/2025/docs/02_java/10_java-jdbc/02_sql-basics/_index.md Co-authored-by: MasterEvarior --- content/2025/docs/02_java/10_java-jdbc/02_sql-basics/_index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/2025/docs/02_java/10_java-jdbc/02_sql-basics/_index.md b/content/2025/docs/02_java/10_java-jdbc/02_sql-basics/_index.md index 37600d1413..b781edc1f5 100644 --- a/content/2025/docs/02_java/10_java-jdbc/02_sql-basics/_index.md +++ b/content/2025/docs/02_java/10_java-jdbc/02_sql-basics/_index.md @@ -445,7 +445,7 @@ Resultat: ## Aggregationen & weiteres In diesem Abschnitt gehen wird auf Aggregationen und weitere wichtige Syntax-Elemente ein. Aggregationen in SQL sind -Funktionen, die verwendet werden, um zusammengefasste Informationen aus großen Datenmengen zu erhalten. +Funktionen, die verwendet werden, um zusammengefasste Informationen aus grossen Datenmengen zu erhalten. Dadurch wird es einfacher, die Daten zu analysieren und Muster oder Trends zu erkennen. Dazu gehören unter anderem: From 1a303b23b5846ae94ca833455f7698b14a8d2101 Mon Sep 17 00:00:00 2001 From: migu890 <50990043+migu890@users.noreply.github.com> Date: Wed, 18 Mar 2026 14:53:23 +0100 Subject: [PATCH 10/18] Update content/2025/docs/02_java/10_java-jdbc/02_sql-basics/_index.md Co-authored-by: MasterEvarior --- content/2025/docs/02_java/10_java-jdbc/02_sql-basics/_index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/2025/docs/02_java/10_java-jdbc/02_sql-basics/_index.md b/content/2025/docs/02_java/10_java-jdbc/02_sql-basics/_index.md index b781edc1f5..ea0382ee8d 100644 --- a/content/2025/docs/02_java/10_java-jdbc/02_sql-basics/_index.md +++ b/content/2025/docs/02_java/10_java-jdbc/02_sql-basics/_index.md @@ -297,7 +297,7 @@ welches in beiden Tabellen vertreten ist. So wird dann die Verbindung hergestell Bei Joins gibt es viele verschiedene und teilweise sehr komplexe Varianten, welche auch dementsprechend selten benutzt werden. Wir schauen uns hier die vier wichtigsten an. -Da diese nicht oft in der Praxis zum Einsatz kommen, sind Right-, Left- sowie auch Full-Join in dieser Doku Optional. +Da diese nicht oft in der Praxis zum Einsatz kommen, sind Right-, Left- sowie auch Full-Join in dieser Doku optional. ### Inner Join (_join_) From dbcf19b59e2fc0520d14d2def183feb678de1e87 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sch=C3=BCrch=20Michel=20Sven=20=28IT-PTR-CEN1-BDE25=29?= Date: Mon, 23 Mar 2026 11:44:09 +0100 Subject: [PATCH 11/18] updated explenation --- content/2025/docs/02_java/10_java-jdbc/_index.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/content/2025/docs/02_java/10_java-jdbc/_index.md b/content/2025/docs/02_java/10_java-jdbc/_index.md index 27f726d85a..5868f3d550 100644 --- a/content/2025/docs/02_java/10_java-jdbc/_index.md +++ b/content/2025/docs/02_java/10_java-jdbc/_index.md @@ -7,3 +7,5 @@ description: > --- In diesem Modul wird der Aufbau und der Umgang mit Datenbanken behandelt. Aussserdem wird mit JDBC angeschaut wie die Verbindung zwischen Datenbank und einem Java Backend erstellt wird. +Datenbank und SQL Grundlagen (Datenbank 101, SQL-Basics und Constraints) werden vor der tatsächlichen Java Database Connection (JDBC) behandelt. +Das Datenbank-design Kapitel enthält wichtige Informationen für künftige Arbeiten mit einer Datenbank, dies wird aber für die Labs nicht zwingend benötigt und ist deswegen optional. From a02af793964cc8d3491102e1b4861dc31dab4a5a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sch=C3=BCrch=20Michel=20Sven=20=28IT-PTR-CEN1-BDE25=29?= Date: Tue, 24 Mar 2026 13:14:56 +0100 Subject: [PATCH 12/18] made db design optional --- .../02_java/10_java-jdbc/05_datenbank-design/_index.md | 7 ++++--- content/2025/docs/02_java/10_java-jdbc/_index.md | 2 +- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/content/2025/docs/02_java/10_java-jdbc/05_datenbank-design/_index.md b/content/2025/docs/02_java/10_java-jdbc/05_datenbank-design/_index.md index c9db4cf872..78855447e7 100644 --- a/content/2025/docs/02_java/10_java-jdbc/05_datenbank-design/_index.md +++ b/content/2025/docs/02_java/10_java-jdbc/05_datenbank-design/_index.md @@ -1,8 +1,9 @@ --- -title: "Datenbank Design" -linkTitle: "Datenbank Design" +title: "Datenbank Design (Optional)" +linkTitle: "Datenbank Design (Optional)" weight: 5 --- +Die Inhalte dieses Moduls sind wichtig für die künftige Datenbank Entwicklung. Da diese Themen für die Labs nicht zwingend gebraucht werden, sind diese optional. ## Ziele @@ -305,7 +306,7 @@ Nun entspricht die Datenbank der dritten Normalform (3NF), da **alle Nicht-Schl Für den Einstieg reichen die ersten drei Normalformen meist aus. Höhere Normalformen wie die **Boyce-Codd-Normalform (BCNF)** oder die **vierte Normalform (4NF)** sind komplexer und werden in speziellen Anwendungsfällen eingesetzt. -## Datenbankdesign (Optional) +## Datenbankdesign In diesem Abschnitt betrachten wir die beiden Begriffe **ERM (Entity-Relationship-Modell)** und **ERD (Entity-Relationship-Diagramm)**. Es ist wichtig, den Unterschied zwischen den beiden zu verstehen. diff --git a/content/2025/docs/02_java/10_java-jdbc/_index.md b/content/2025/docs/02_java/10_java-jdbc/_index.md index 5868f3d550..eba752b888 100644 --- a/content/2025/docs/02_java/10_java-jdbc/_index.md +++ b/content/2025/docs/02_java/10_java-jdbc/_index.md @@ -7,5 +7,5 @@ description: > --- In diesem Modul wird der Aufbau und der Umgang mit Datenbanken behandelt. Aussserdem wird mit JDBC angeschaut wie die Verbindung zwischen Datenbank und einem Java Backend erstellt wird. -Datenbank und SQL Grundlagen (Datenbank 101, SQL-Basics und Constraints) werden vor der tatsächlichen Java Database Connection (JDBC) behandelt. +Datenbank und SQL Grundlagen (Datenbank 101, SQL Syntax und Constraints) werden vor der tatsächlichen Java Database Connection (JDBC) behandelt und dienen als Vorbereitung. Das Datenbank-design Kapitel enthält wichtige Informationen für künftige Arbeiten mit einer Datenbank, dies wird aber für die Labs nicht zwingend benötigt und ist deswegen optional. From 56ee3c3fb586619a517b19db15cb55d18d65736c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sch=C3=BCrch=20Michel=20Sven=20=28IT-PTR-CEN1-BDE25=29?= Date: Tue, 24 Mar 2026 13:18:19 +0100 Subject: [PATCH 13/18] lint error --- .../docs/02_java/10_java-jdbc/05_datenbank-design/_index.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/content/2025/docs/02_java/10_java-jdbc/05_datenbank-design/_index.md b/content/2025/docs/02_java/10_java-jdbc/05_datenbank-design/_index.md index 78855447e7..b794f9010a 100644 --- a/content/2025/docs/02_java/10_java-jdbc/05_datenbank-design/_index.md +++ b/content/2025/docs/02_java/10_java-jdbc/05_datenbank-design/_index.md @@ -3,7 +3,8 @@ title: "Datenbank Design (Optional)" linkTitle: "Datenbank Design (Optional)" weight: 5 --- -Die Inhalte dieses Moduls sind wichtig für die künftige Datenbank Entwicklung. Da diese Themen für die Labs nicht zwingend gebraucht werden, sind diese optional. + +Die Inhalte dieses Moduls sind wichtig für die künftige Datenbank Entwicklung. Da diese Themen für die Labs nicht zwingend gebraucht werden, sind diese optional. ## Ziele From a749bfe92dcf4396503d91db6f0e4fbd99e1a29b Mon Sep 17 00:00:00 2001 From: migu890 <50990043+migu890@users.noreply.github.com> Date: Tue, 24 Mar 2026 14:28:29 +0100 Subject: [PATCH 14/18] Apply suggestion from @MasterEvarior Co-authored-by: MasterEvarior --- content/2025/docs/02_java/10_java-jdbc/04_jdbc/_index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/2025/docs/02_java/10_java-jdbc/04_jdbc/_index.md b/content/2025/docs/02_java/10_java-jdbc/04_jdbc/_index.md index 9206103744..6f0c442fb5 100644 --- a/content/2025/docs/02_java/10_java-jdbc/04_jdbc/_index.md +++ b/content/2025/docs/02_java/10_java-jdbc/04_jdbc/_index.md @@ -66,7 +66,7 @@ Diese Beispiele wurden in einem Maven-Projekt ohne das Spring-Framework erstellt Sobald die gewünschte Datenbank festgelegt wurde, kann der dazugehörende JDBC-Treiber als Maven-Abhängigkeit herangezogen werden. -Das folgende Beispiel zeigt eine Abhängigkeit zu einem MySql-Treiber: +Das folgende Beispiel zeigt eine Abhängigkeit zu einem MySQL-Treiber: ![dependency.png](images/dependency.png) From d1c3a0e0ffe30f94da540d3179edec9815302f3e Mon Sep 17 00:00:00 2001 From: migu890 <50990043+migu890@users.noreply.github.com> Date: Tue, 24 Mar 2026 14:28:47 +0100 Subject: [PATCH 15/18] Apply suggestion from @MasterEvarior Co-authored-by: MasterEvarior --- content/2025/docs/02_java/10_java-jdbc/04_jdbc/_index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/2025/docs/02_java/10_java-jdbc/04_jdbc/_index.md b/content/2025/docs/02_java/10_java-jdbc/04_jdbc/_index.md index 6f0c442fb5..3c4b7de94d 100644 --- a/content/2025/docs/02_java/10_java-jdbc/04_jdbc/_index.md +++ b/content/2025/docs/02_java/10_java-jdbc/04_jdbc/_index.md @@ -83,7 +83,7 @@ Mit der statischen Methode _forName_ von _Class_ wird die Klasse _Driver_ gelade Hier geht es um die Datenbank spezifischer Treiber, welche es der Anwendung den Datenzugriff auf der gewünschten Datenbank ermöglicht. -Im folgenden Beispiel wird der JDBC-Treiber für MySql registriert: +Im folgenden Beispiel wird der JDBC-Treiber für MySQL registriert: ![](images/driver_registration.png) From 3787fcb544324bc0b91a9331016fb3869a74e41e Mon Sep 17 00:00:00 2001 From: migu890 <50990043+migu890@users.noreply.github.com> Date: Tue, 24 Mar 2026 14:29:29 +0100 Subject: [PATCH 16/18] Apply suggestion from @MasterEvarior Co-authored-by: MasterEvarior --- content/2025/docs/02_java/10_java-jdbc/04_jdbc/_index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/2025/docs/02_java/10_java-jdbc/04_jdbc/_index.md b/content/2025/docs/02_java/10_java-jdbc/04_jdbc/_index.md index 3c4b7de94d..d59a483bb7 100644 --- a/content/2025/docs/02_java/10_java-jdbc/04_jdbc/_index.md +++ b/content/2025/docs/02_java/10_java-jdbc/04_jdbc/_index.md @@ -103,7 +103,7 @@ Für diesen Zweck, wie auch für die Konfiguration unterschiedlichen Umgebungen, oder Umgebungsvariablen (mit oder ohne Verschlüsselung) besser. Die obige Konfiguration kann nun für die Herstellung einer Datenbankverbindung verwendet werden. -Dazu wird die statische Methode _getConnection_ der Klasse _DriverManager_ verwendet: +Dazu wird die statische Methode `getConnection` der Klasse `DriverManager` verwendet: ![](images/connection_creation.png) From bb8c69103af0957f081c7aa7ad086130a8c9f15e Mon Sep 17 00:00:00 2001 From: migu890 <50990043+migu890@users.noreply.github.com> Date: Tue, 24 Mar 2026 15:08:24 +0100 Subject: [PATCH 17/18] Apply suggestion from @andiaeg Co-authored-by: andiaeg --- content/2025/docs/02_java/10_java-jdbc/_index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/2025/docs/02_java/10_java-jdbc/_index.md b/content/2025/docs/02_java/10_java-jdbc/_index.md index eba752b888..87bcf2fd09 100644 --- a/content/2025/docs/02_java/10_java-jdbc/_index.md +++ b/content/2025/docs/02_java/10_java-jdbc/_index.md @@ -8,4 +8,4 @@ description: > In diesem Modul wird der Aufbau und der Umgang mit Datenbanken behandelt. Aussserdem wird mit JDBC angeschaut wie die Verbindung zwischen Datenbank und einem Java Backend erstellt wird. Datenbank und SQL Grundlagen (Datenbank 101, SQL Syntax und Constraints) werden vor der tatsächlichen Java Database Connection (JDBC) behandelt und dienen als Vorbereitung. -Das Datenbank-design Kapitel enthält wichtige Informationen für künftige Arbeiten mit einer Datenbank, dies wird aber für die Labs nicht zwingend benötigt und ist deswegen optional. +Das Datenbank-Design Kapitel enthält wichtige Informationen für künftige Arbeiten mit einer Datenbank, dies wird aber für die Labs nicht zwingend benötigt und ist deswegen optional. From 00f57f0ac072cb7c7d64cebe45e86d7579aae8e3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sch=C3=BCrch=20Michel=20Sven=20=28IT-PTR-CEN1-BDE25=29?= Date: Tue, 24 Mar 2026 15:22:32 +0100 Subject: [PATCH 18/18] deleted link to challenge --- .../docs/02_java/10_java-jdbc/05_datenbank-design/_index.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/content/2025/docs/02_java/10_java-jdbc/05_datenbank-design/_index.md b/content/2025/docs/02_java/10_java-jdbc/05_datenbank-design/_index.md index b794f9010a..32489607da 100644 --- a/content/2025/docs/02_java/10_java-jdbc/05_datenbank-design/_index.md +++ b/content/2025/docs/02_java/10_java-jdbc/05_datenbank-design/_index.md @@ -442,5 +442,3 @@ Diese zusätzliche Tabelle ermöglicht eine **eindeutige Zuordnung** zwischen B Die Kardinalität ist ein wichtiger Bestandteil des **Entity-Relationship-Modells (ERM)** und beschreibt, wie Entitäten miteinander verknüpft sind. Das Verständnis der Kardinalitäten hilft, eine **optimale Datenbankstruktur** zu entwickeln, die **Redundanzen vermeidet** und **Datenkonsistenz sicherstellt**. ![task1](/images/task.png) Jetzt bist du dran. Löse bitte diese [Aufgabe](../../../../labs/02_java/11_java-jdbc/01_Jdbc_Exercises) in den Labs. - -![task1](/images/task.png) Jetzt bist du dran. Hier geht es zu einer Challange bezüglich Datenbank Design [Aufgaben zu Datenbanken](../../../../challenges/database/) .