09: Demos mit SQL

main
Teena Steger 2026-05-12 08:50:25 +02:00
parent 7aaf855f4e
commit 0ad7ca40e4
4 changed files with 92 additions and 0 deletions

View File

@ -0,0 +1,4 @@
CREATE TABLE personen (
name TEXT NOT NULL,
hobbies TEXT
);

View File

@ -0,0 +1 @@
INSERT INTO personen (name, hobbies) VALUES ('Siri', 'Lesen, Wandern, Kochen'),('Alexa', 'Kochen, Gitarre spielen');

View File

@ -0,0 +1 @@
SELECT * FROM personen;

View File

@ -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))
}