En aquest tema, aprendrem a realitzar operacions CRUD (Create, Read, Update, Delete) en una base de dades utilitzant Go. Aquestes operacions són fonamentals per a la majoria d'aplicacions que treballen amb dades persistents.

Objectius

  • Entendre què són les operacions CRUD.
  • Aprendre a connectar-se a una base de dades des de Go.
  • Implementar operacions de creació, lectura, actualització i eliminació en una base de dades.

Requisits Previs

  • Coneixements bàsics de Go.
  • Coneixements bàsics de bases de dades SQL.
  • Haver completat el tema anterior sobre connexió a una base de dades.

Contingut

Introducció a les Operacions CRUD

Les operacions CRUD són les operacions bàsiques que es poden realitzar en una base de dades. Aquestes operacions són:

  • Create (Crear): Inserir noves dades a la base de dades.
  • Read (Llegir): Recuperar dades de la base de dades.
  • Update (Actualitzar): Modificar dades existents a la base de dades.
  • Delete (Eliminar): Eliminar dades de la base de dades.

Configuració de la Base de Dades

Abans de començar amb les operacions CRUD, necessitem configurar la connexió a la base de dades. Utilitzarem una base de dades SQLite per a aquest exemple.

Exemple de Connexió a SQLite

package main

import (
    "database/sql"
    "log"
    _ "github.com/mattn/go-sqlite3"
)

func main() {
    db, err := sql.Open("sqlite3", "./example.db")
    if err != nil {
        log.Fatal(err)
    }
    defer db.Close()

    // Creació de la taula
    createTableSQL := `CREATE TABLE IF NOT EXISTS users (
        "id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,        
        "name" TEXT,
        "age" INTEGER
    );`

    _, err = db.Exec(createTableSQL)
    if err != nil {
        log.Fatal(err)
    }
}

Creació d'Operacions CRUD

Create (Crear)

Per inserir noves dades a la base de dades, utilitzem l'operació INSERT.

Exemple de Codi

func createUser(db *sql.DB, name string, age int) {
    insertUserSQL := `INSERT INTO users (name, age) VALUES (?, ?)`
    statement, err := db.Prepare(insertUserSQL)
    if err != nil {
        log.Fatal(err)
    }
    defer statement.Close()

    _, err = statement.Exec(name, age)
    if err != nil {
        log.Fatal(err)
    }
    log.Println("User created successfully")
}

Read (Llegir)

Per recuperar dades de la base de dades, utilitzem l'operació SELECT.

Exemple de Codi

func getUsers(db *sql.DB) {
    row, err := db.Query("SELECT id, name, age FROM users")
    if err != nil {
        log.Fatal(err)
    }
    defer row.Close()

    for row.Next() {
        var id int
        var name string
        var age int
        row.Scan(&id, &name, &age)
        log.Println(id, name, age)
    }
}

Update (Actualitzar)

Per modificar dades existents a la base de dades, utilitzem l'operació UPDATE.

Exemple de Codi

func updateUser(db *sql.DB, id int, name string, age int) {
    updateUserSQL := `UPDATE users SET name = ?, age = ? WHERE id = ?`
    statement, err := db.Prepare(updateUserSQL)
    if err != nil {
        log.Fatal(err)
    }
    defer statement.Close()

    _, err = statement.Exec(name, age, id)
    if err != nil {
        log.Fatal(err)
    }
    log.Println("User updated successfully")
}

Delete (Eliminar)

Per eliminar dades de la base de dades, utilitzem l'operació DELETE.

Exemple de Codi

func deleteUser(db *sql.DB, id int) {
    deleteUserSQL := `DELETE FROM users WHERE id = ?`
    statement, err := db.Prepare(deleteUserSQL)
    if err != nil {
        log.Fatal(err)
    }
    defer statement.Close()

    _, err = statement.Exec(id)
    if err != nil {
        log.Fatal(err)
    }
    log.Println("User deleted successfully")
}

Exercicis Pràctics

  1. Crear un Usuari: Escriu una funció que insereixi un nou usuari a la base de dades.
  2. Llegir Usuaris: Escriu una funció que recuperi tots els usuaris de la base de dades i els imprimeixi.
  3. Actualitzar un Usuari: Escriu una funció que actualitzi el nom i l'edat d'un usuari existent.
  4. Eliminar un Usuari: Escriu una funció que elimini un usuari de la base de dades.

Solucions

Crear un Usuari

func main() {
    db, err := sql.Open("sqlite3", "./example.db")
    if err != nil {
        log.Fatal(err)
    }
    defer db.Close()

    createUser(db, "John Doe", 30)
}

Llegir Usuaris

func main() {
    db, err := sql.Open("sqlite3", "./example.db")
    if err != nil {
        log.Fatal(err)
    }
    defer db.Close()

    getUsers(db)
}

Actualitzar un Usuari

func main() {
    db, err := sql.Open("sqlite3", "./example.db")
    if err != nil {
        log.Fatal(err)
    }
    defer db.Close()

    updateUser(db, 1, "Jane Doe", 25)
}

Eliminar un Usuari

func main() {
    db, err := sql.Open("sqlite3", "./example.db")
    if err != nil {
        log.Fatal(err)
    }
    defer db.Close()

    deleteUser(db, 1)
}

Conclusió

En aquest tema, hem après a realitzar operacions CRUD en una base de dades utilitzant Go. Aquestes operacions són fonamentals per a qualsevol aplicació que treballi amb dades persistents. Hem vist com connectar-nos a una base de dades, crear taules i realitzar operacions de creació, lectura, actualització i eliminació de dades.

En el següent tema, explorarem com utilitzar un ORM (Object-Relational Mapping) per simplificar aquestes operacions.

© Copyright 2024. Tots els drets reservats