Source File: ex26a/main.go

package main

import (
    "log"
    _ "github.com/mattn/go-sqlite3"
    "github.com/jmoiron/sqlx"
    "encoding/json"
    "os"
)

type Customer struct {
    Id int64 `db:"id"`
    Name string `db:"name"`
    Address string `db:"address"`
    City string `db:"city"`
    Zip string `db:"zip"`
}

func main() {
    customers := []Customer{}
    json_data, err := os.ReadFile("customers.json")
    if err != nil { log.Fatal(err) }

    err = json.Unmarshal(json_data, &customers)
    if err != nil { log.Fatal(err) }

    db, err := sqlx.Connect("sqlite3", "db.sqlite3")
    if err != nil { log.Fatal(err) }

    tx := db.MustBegin()
    for _, customer := range customers {
        _, err = tx.NamedExec(`INSERT INTO customer
                (name, address, city, zip) VALUES
                (:name, :address, :city, :zip)`, customer)

        if err != nil { log.Fatal(err) }
    }
    tx.Commit()
}