diff --git a/web/09/09_aufgaben.md b/web/09/09_aufgaben.md
index 2c07ac6..44d70fe 100644
--- a/web/09/09_aufgaben.md
+++ b/web/09/09_aufgaben.md
@@ -16,7 +16,7 @@ Siehe [Hinweise zu Aufgaben 2 und 3](#Hinweise-zu-Aufgaben-1-und-2) weiter unten
## 2. Go-Übung: Datenbank UPDATE
-**Aufgabenstellung**: Erweitern Sie das Programm aus Aufgabe 4 um einen neuen Endpunkt `/update`, der einen vorhandenen Datensatz in der Datenbank aktualisiert.
+**Aufgabenstellung**: Erweitern Sie das Programm aus Aufgabe 1 um einen neuen Endpunkt `/update`, der einen vorhandenen Datensatz in der Datenbank aktualisiert.
#### Hinweis
Siehe [Hinweise zu Aufgaben 1 und 2](#Hinweise-zu-Aufgaben-1-und-2) weiter unten.
diff --git a/web/09/demos/go/hobbies/01_save_db.go b/web/09/demos/go/hobbies/01_save_db.go
new file mode 100644
index 0000000..73fd09d
--- /dev/null
+++ b/web/09/demos/go/hobbies/01_save_db.go
@@ -0,0 +1,86 @@
+package main
+
+import (
+ "database/sql"
+ "fmt"
+ "log"
+ "net/http"
+
+ _ "github.com/lib/pq"
+)
+
+type formExampleDBHandler int
+
+func (formHandler formExampleDBHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
+
+ //Datenbank-Verbindung herstellen
+
+ // Verbindungszeichenfolge: Benutzername, Passwort, DB-Name, Host, Port
+ connStr := "user=devuser password=devpass dbname=devdb host=localhost port=5432 sslmode=disable"
+
+ // Verbindung zur Datenbank öffnen
+ db, err := sql.Open("postgres", connStr)
+ if err != nil {
+ log.Println("Fehler beim Öffnen der Verbindung:", err)
+ http.Error(w, "Interner Server-Fehler.", http.StatusInternalServerError)
+ return
+ }
+ defer db.Close()
+
+ // Verbindung testen
+ err = db.Ping()
+ if err != nil {
+ log.Println("Datenbank nicht erreichbar:", err)
+ http.Error(w, "Interner Server-Fehler.", http.StatusInternalServerError)
+ return
+ }
+ log.Println("Verbindung erfolgreich hergestellt.")
+
+ // INSERT-Anweisung vorbereiten
+ query := `INSERT INTO personen (name, hobbies) VALUES ($1, $2)`
+ // INSERT-Anweisung ausführen
+ _, err = db.Exec(query, "Louise", "Lesen, Wandern")
+ if err != nil {
+ log.Println("Fehler beim Einfügen:", err)
+ http.Error(w, "Interner Server-Fehler.", http.StatusInternalServerError)
+ return
+ }
+ log.Println("Datensatz erfolgreich eingefügt.")
+
+ // SELECT-Abfrage vorbereiten
+ rows, err := db.Query(`SELECT name, hobbies FROM personen`)
+ if err != nil {
+ log.Println("Fehler bei der Abfrage:", err)
+ http.Error(w, "Interner Server-Fehler.", http.StatusInternalServerError)
+ return
+ }
+ defer rows.Close()
+
+ // Ergebnisse durchlaufen
+ for rows.Next() {
+ var name string
+ var hobbies string
+
+ err := rows.Scan(&name, &hobbies)
+ if err != nil {
+ log.Println("Fehler beim Auslesen:", err)
+ http.Error(w, "Interner Server-Fehler.", http.StatusInternalServerError)
+ return
+ }
+
+ fmt.Printf("Name: %s, Hobbies: %s\n", name, hobbies)
+ }
+
+ // Fehler beim Iterieren prüfen
+ if err = rows.Err(); err != nil {
+ log.Println(err)
+ http.Error(w, "Interner Server-Fehler.", http.StatusInternalServerError)
+ return
+ }
+
+}
+
+func main() {
+ var r formExampleDBHandler
+ log.Fatal(http.ListenAndServe("localhost:8080", r))
+}
diff --git a/web/09/demos/go/hobbies/go.mod b/web/09/demos/go/hobbies/go.mod
new file mode 100644
index 0000000..859355f
--- /dev/null
+++ b/web/09/demos/go/hobbies/go.mod
@@ -0,0 +1,5 @@
+module hobbies
+
+go 1.24.5
+
+require github.com/lib/pq v1.10.9
diff --git a/web/09/demos/go/hobbies/go.sum b/web/09/demos/go/hobbies/go.sum
new file mode 100644
index 0000000..aeddeae
--- /dev/null
+++ b/web/09/demos/go/hobbies/go.sum
@@ -0,0 +1,2 @@
+github.com/lib/pq v1.10.9 h1:YXG7RB+JIjhP29X+OtkiDnYaXQwpS4JEWq7dtCCRUEw=
+github.com/lib/pq v1.10.9/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=
diff --git a/web/09/demos/js/02_hello.html b/web/09/demos/js/02_hello.html
new file mode 100644
index 0000000..b2de9af
--- /dev/null
+++ b/web/09/demos/js/02_hello.html
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+ Hello World
+
+
+
+ Grüße an alle
+ TH Mannheim
+
+ Welt
+
+
+
+
\ No newline at end of file
diff --git a/web/09/demos/js/02_hello.js b/web/09/demos/js/02_hello.js
new file mode 100644
index 0000000..4fde3b0
--- /dev/null
+++ b/web/09/demos/js/02_hello.js
@@ -0,0 +1 @@
+alert("Hallo Studierende!");
\ No newline at end of file
diff --git a/web/09/demos/js/03_basics.js b/web/09/demos/js/03_basics.js
new file mode 100644
index 0000000..c324e65
--- /dev/null
+++ b/web/09/demos/js/03_basics.js
@@ -0,0 +1,105 @@
+// DATENTYPEN
+let zahl = 42;
+let text = "Hallo Welt";
+let wahr = true;
+let undefiniert;
+let leer = null;
+let symbol = Symbol("id"); // erzeugt einzigartigen Wert
+let gross = 123n; // bigint: für sehr große Ganzzahlen
+
+// UNTERSCHIED ZWISCHEN null UND undefined
+console.log(typeof undefiniert); // "undefined"
+console.log(typeof leer); // "object"
+console.log(undefiniert == null); // true → lose Gleichheit, beide gelten als "leer"
+console.log(undefiniert === null); // false → strikte Gleichheit, Typen sind verschieden
+
+// OBJEKTE MIT METHODEN
+
+// Beispiel: const mit Objekt
+const person = { name: "Moritz" };
+person.name = "Max";
+// person = {} //nicht erlaubt, weil const
+
+// Beispiel: Objekt mit Methode
+let benutzer = {
+ name: "Galinda",
+ alter: 25,
+ begruessen: function() {
+ console.log("Hallo, ich bin " + this.name);
+ }
+};
+benutzer.begruessen(); // Methode aufrufen
+console.log(benutzer["alter"]); // Zugriff via Schlüssel
+
+// KONTROLLFLUSS
+if (zahl > 40) {
+ console.log("Zahl ist größer als 40");
+} else if (zahl === 40) {
+ console.log("Zahl ist genau 40");
+} else {
+ console.log("Zahl ist kleiner als 40");
+}
+
+switch (text) {
+ case "Hallo Welt":
+ console.log("Begrüßung erkannt");
+ break;
+ case "Hi":
+ console.log("Kurzform erkannt");
+ break;
+ default:
+ console.log("Unbekannter Text");
+}
+
+switch (42) {
+ case "42": // kein Match, da Typ unterschiedlich -> Vergleich basiert auf strikter Gleichheit (===)
+ console.log("String");
+ break;
+ case 42:
+ console.log("Number");
+ break;
+}
+
+for (let i = 0; i < 3; i++) {
+ console.log("Zähler:", i);
+}
+
+// ARRAYS
+let obst = ["Apfel", "Banane", "Kirsche"];
+obst.push("Mango");
+console.log(obst[1]);
+obst.forEach(function(f) {
+ console.log("Frucht:", f);
+});
+const zahlen = [1, 2, 3];
+// map erzeugt ein neues Array
+const verdoppelt = zahlen.map(n => n * 2);
+console.log(verdoppelt); // [2, 4, 6]
+
+// SPREAD-OPERATOR
+const extendedZahlen = [...zahlen, 4];
+console.log(extendedZahlen);
+
+const extendedBenutzer = {...benutzer, beiname: "die Gute"}
+console.log(extendedBenutzer["name"] + " " + extendedBenutzer["beiname"])
+
+// ERROR HANDLING
+// try-catch-finally funktioniert ähnlich wie in Java
+try {
+ // Fehler absichtlich auslösen
+ throw new Error("Etwas ist schiefgelaufen");
+} catch (e) {
+ console.error("Fehler:", e.message); // Fehlerbehandlung
+} finally {
+ console.log("Cleanup abgeschlossen"); // wird immer ausgeführt
+}
+
+// JSON
+// Objekt → JSON-String
+const obj = { name: "Margaret", alter: 13 };
+const jsonStr = JSON.stringify(obj);
+console.log(jsonStr);
+
+// JSON-String → Objekt
+const parsed = JSON.parse(jsonStr);
+console.log(parsed.alter);
\ No newline at end of file
diff --git a/web/09/demos/js/04_functions.js b/web/09/demos/js/04_functions.js
new file mode 100644
index 0000000..afed174
--- /dev/null
+++ b/web/09/demos/js/04_functions.js
@@ -0,0 +1,53 @@
+// Normale Funktionsdeklaration
+function add(a, b) {
+ return a + b;
+}
+console.log("Normale Funktion:", add(2, 3));
+
+
+// Anonyme Funktion
+const multiply = function(x, y) {
+ return x * y;
+};
+console.log("Anonyme Funktion:", multiply(4, 5));
+
+
+// Arrow Function
+const subtract = (a, b) => a - b;
+console.log("Arrow Function:", subtract(10, 3));
+
+const square = x => x * x;
+console.log("Quadrat:", square(6));
+
+const greet = (name) => {
+ return "Hallo " + name;
+};
+console.log(greet("Hans"));
+
+
+// Funktionen als Parameter (Callbacks)
+function doMath(a, b, operation) {
+ return operation(a, b);
+}
+
+// Übergabe einer anonymen Funktion
+console.log("Callback anonym:", doMath(3, 4, function(x, y) {
+ return x + y;
+}));
+
+// Übergabe einer Arrow Function
+console.log("Callback arrow:", doMath(3, 4, (x, y) => x * y));
+
+
+// Higher-Order Functions mit Arrays (map)
+let zahlen = [1, 2, 3, 4, 5];
+
+// Mit anonymer Funktion
+let verdoppelt = zahlen.map(function(n) {
+ return n * 2;
+});
+console.log("Verdoppelt (anonym):", verdoppelt);
+
+// Mit Arrow Function
+let verdoppeltArrow = zahlen.map(n => n * 2);
+console.log("Verdoppelt (arrow):", verdoppeltArrow);
\ No newline at end of file