lab-development-imb/web/09/demos/go/hobbies/01_save_db.go

87 lines
2.1 KiB
Go

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