From 0ad7ca40e4dc21dd868619bb8966a5164d39eb15 Mon Sep 17 00:00:00 2001 From: Teena Steger Date: Tue, 12 May 2026 08:50:25 +0200 Subject: [PATCH] 09: Demos mit SQL --- .../demos/db/sql/personen/create_personen.sql | 4 + .../demos/db/sql/personen/insert_personen.sql | 1 + .../demos/db/sql/personen/select_personen.sql | 1 + web/09/demos/hobbies/01_save_db.go | 86 +++++++++++++++++++ 4 files changed, 92 insertions(+) create mode 100644 web/09/demos/db/sql/personen/create_personen.sql create mode 100644 web/09/demos/db/sql/personen/insert_personen.sql create mode 100644 web/09/demos/db/sql/personen/select_personen.sql create mode 100644 web/09/demos/hobbies/01_save_db.go diff --git a/web/09/demos/db/sql/personen/create_personen.sql b/web/09/demos/db/sql/personen/create_personen.sql new file mode 100644 index 0000000..256f6b5 --- /dev/null +++ b/web/09/demos/db/sql/personen/create_personen.sql @@ -0,0 +1,4 @@ +CREATE TABLE personen ( + name TEXT NOT NULL, + hobbies TEXT +); \ No newline at end of file diff --git a/web/09/demos/db/sql/personen/insert_personen.sql b/web/09/demos/db/sql/personen/insert_personen.sql new file mode 100644 index 0000000..83293bf --- /dev/null +++ b/web/09/demos/db/sql/personen/insert_personen.sql @@ -0,0 +1 @@ +INSERT INTO personen (name, hobbies) VALUES ('Siri', 'Lesen, Wandern, Kochen'),('Alexa', 'Kochen, Gitarre spielen'); \ No newline at end of file diff --git a/web/09/demos/db/sql/personen/select_personen.sql b/web/09/demos/db/sql/personen/select_personen.sql new file mode 100644 index 0000000..6aa87aa --- /dev/null +++ b/web/09/demos/db/sql/personen/select_personen.sql @@ -0,0 +1 @@ +SELECT * FROM personen; \ No newline at end of file diff --git a/web/09/demos/hobbies/01_save_db.go b/web/09/demos/hobbies/01_save_db.go new file mode 100644 index 0000000..73fd09d --- /dev/null +++ b/web/09/demos/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)) +}