golang postgresql CRUD

Posted ibg

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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!")
}

 

以上是关于golang postgresql CRUD的主要内容,如果未能解决你的问题,请参考以下文章

纯golang+sqlite3 CRUD

postgreSQL第一天——关系CRUD和联接

SQLErrorCodes loaded: [DB2, Derby, H2, HSQL, Informix, MS-SQL, MySQL, Oracle, PostgreSQL, Sybase(代码片

golang apis.V2的Crud方法接口设计

golang sqlite3 CRUD

golang自己定义数据类型查询与插入postgresql中point数据