zoukankan      html  css  js  c++  java
  • golang sqlite3 CRUD

    package main
    import (
        "database/sql"
        "fmt"
    
        "log"
    
        _ "github.com/mattn/go-sqlite3" // sqlite3 dirver
    )
    
    // People - database fields
    type People struct {
        id   int
        name string
        age  int
    }
    
    type appContext struct {
        db *sql.DB
    }
    
    func connectDB(driverName string, dbName string) (*appContext, 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() {
        stmt, err := c.db.Prepare("INSERT INTO users(name,age) values(?,?)")
        if err != nil {
            log.Fatal(err)
        }
        result, err := stmt.Exec("Jack", 1)
        if err != nil {
            fmt.Printf("add error: %v", err)
            return
        }
        lastID, err := result.LastInsertId()
        if err != nil {
            log.Fatal(err)
        }
        fmt.Println("inserted id is ", lastID)
    }
    
    // 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 = ? WHERE id = ?")
        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 = ?")
        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)
    }
    
    // Mysqlite3 - sqlite3 CRUD
    func main() {
        c, err := connectDB("sqlite3", "abc.db")
        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!")
    }
  • 相关阅读:
    关于gtk的GCond
    位运算符及其应用
    登陆新浪微博&批量下载收藏内容[Python脚本实现]
    海量数据处理算法—Bloom Filter
    海量数据处理算法—BitMap
    VB.NET机房收费系统——组合查询
    非官方的gstreamer学习资料及概念摘要
    [Python入门及进阶笔记00]写在前面(目录/书籍/学习路线/其他)
    [JAVA][Eclipse]JVM terminated. Exit code=13
    介绍一个android开源文件选择对话框:androidfiledialog
  • 原文地址:https://www.cnblogs.com/ibgo/p/6005893.html
Copyright © 2011-2022 走看看