forked from WEB-IB-SS26/development-ib
09: Demos mit SQL
parent
7aaf855f4e
commit
0ad7ca40e4
|
|
@ -0,0 +1,4 @@
|
|||
CREATE TABLE personen (
|
||||
name TEXT NOT NULL,
|
||||
hobbies TEXT
|
||||
);
|
||||
|
|
@ -0,0 +1 @@
|
|||
INSERT INTO personen (name, hobbies) VALUES ('Siri', 'Lesen, Wandern, Kochen'),('Alexa', 'Kochen, Gitarre spielen');
|
||||
|
|
@ -0,0 +1 @@
|
|||
SELECT * FROM personen;
|
||||
|
|
@ -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))
|
||||
}
|
||||
Loading…
Reference in New Issue