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