• golang postgresql CRUD


    package main
    
    import (
        "database/sql"
        "fmt"
        "log"
    
        _ "github.com/lib/pq" // postgres driver
    )
    
    // People - database
    type People struct {
        id   int
        name string
        age  int
    }
    
    type appContext struct {
        db *sql.DB
    }
    
    // ConnectDB connect specify database
    func connectDB(driverName string, dbName string) (c *appContext, errorMessage string) {
        db, err := sql.Open(driverName, dbName)
        if err != nil {
            return nil, err.Error()
        }
        if err = db.Ping(); err != nil {
            return nil, err.Error()
        }
        return &appContext{db}, ""
    }
    
    // Create
    func (c *appContext) Create() {
        // get insert id
        lastInsertId := 0
        err := c.db.QueryRow("INSERT INTO users(name,age) VALUES($1,$2) RETURNING id", "jack", 22).Scan(&lastInsertId)
        if err != nil {
            log.Fatal(err)
        }
        fmt.Println("inserted id is ", lastInsertId)
    }
    
    // Read
    func (c *appContext) Read() {
        rows, err := c.db.Query("SELECT * FROM users")
    
        if err != nil {
            fmt.Println(err.Error())
            return
        }
        defer rows.Close()
    
        for rows.Next() {
            p := new(People)
            err := rows.Scan(&p.id, &p.name, &p.age)
            if err != nil {
                fmt.Println(err)
            }
            fmt.Println(p.id, p.name, p.age)
        }
    }
    
    // UPDATE
    func (c *appContext) Update() {
        stmt, err := c.db.Prepare("UPDATE users SET age = $1 WHERE id = $2")
        if err != nil {
            log.Fatal(err)
        }
        result, err := stmt.Exec(10, 1)
        if err != nil {
            log.Fatal(err)
        }
        affectNum, err := result.RowsAffected()
        if err != nil {
            log.Fatal(err)
        }
        fmt.Println("update affect rows is ", affectNum)
    }
    
    // DELETE
    func (c *appContext) Delete() {
        stmt, err := c.db.Prepare("DELETE FROM users WHERE id = $1")
        if err != nil {
            log.Fatal(err)
        }
        result, err := stmt.Exec(1)
        if err != nil {
            log.Fatal(err)
        }
        affectNum, err := result.RowsAffected()
        if err != nil {
            log.Fatal(err)
        }
        fmt.Println("delete affect rows is ", affectNum)
    }
    
    // Mypg - Postgresql CRUD
    func main() {
        c, err := connectDB("postgres", "user=user1 password=password1 dbname=exampledb")
        defer c.db.Close()
    
        if err != "" {
            print(err)
        }
    
        c.Create()
        fmt.Println("add action done!")
    
        c.Read()
        fmt.Println("get action done!")
    
        c.Update()
        fmt.Println("update action done!")
    
        c.Delete()
        fmt.Println("delete action done!")
    }
  • 相关阅读:
    iOS 10 的杂碎资料
    MAC SVN Merge 操作
    iOS中AFNetworking2.0和AFNetworking3.0 的HTTPS的配置
    从字符串中获取指定字符内的内容
    判断是否是是全汉字、全字母、全数字、数字和字母等
    解析URL 获取某一个参数值
    长按TextField或TextView显示中文的粘贴复制
    TextField和TextView的限制输入长度
    抢购、距活动结束,剩余时间倒计时。
    Cell右滑 多个编辑选项栏
  • 原文地址:https://www.cnblogs.com/ibgo/p/6010245.html
Copyright © 2020-2023  润新知