forked from WEB-IMB-WS2526/lab-development-imb
87 lines
2.1 KiB
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))
|
|
}
|