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