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

    参考:https://blog.csdn.net/wyyyh9458/article/details/83550505https://www.v2ex.com/amp/t/618547

    看代码应该是谢大神写的;另,我没有修改 go.mod,类似:

    `github.com/mattn/go-sqlite3 v2.0.0+incompatible // indirect` --> `github.com/mattn/go-sqlite3 v1.10.0`

    直接在liteide中是可以编译成功的。

    代码:

    package main
    
    import (
        "database/sql"
        "fmt"
    
        _ "github.com/mattn/go-sqlite3"
    )
    
    func main() {
        fmt.Println("打开数据")
        db, err := sql.Open("sqlite3", "./foo.db")
        checkErr(err)
    
        fmt.Println("生成数据表")
        sql_table := `
    CREATE TABLE IF NOT EXISTS "userinfo" (
       "uid" INTEGER PRIMARY KEY AUTOINCREMENT,
       "username" VARCHAR(64) NULL,
       "departname" VARCHAR(64) NULL,
       "created" TIMESTAMP default (datetime('now', 'localtime'))  
    );
    CREATE TABLE IF NOT EXISTS "userdeatail" (
       "uid" INT(10) NULL,
       "intro" TEXT NULL,
       "profile" TEXT NULL,
       PRIMARY KEY (uid)
    );
       `
        db.Exec(sql_table)
    
        //插入数据
        fmt.Print("插入数据, ID=")
        stmt, err := db.Prepare("INSERT INTO userinfo(username, departname)  values(?, ?)")
        checkErr(err)
        res, err := stmt.Exec("astaxie", "研发部门")
        checkErr(err)
        id, err := res.LastInsertId()
        checkErr(err)
        fmt.Println(id)
    
        //更新数据
        fmt.Print("更新数据 ")
        stmt, err = db.Prepare("update userinfo set username=? where uid=?")
        checkErr(err)
        res, err = stmt.Exec("astaxieupdate", id)
        checkErr(err)
        affect, err := res.RowsAffected()
        checkErr(err)
        fmt.Println(affect)
    
        //查询数据
        fmt.Println("查询数据")
        rows, err := db.Query("SELECT * FROM userinfo")
        checkErr(err)
        for rows.Next() {
            var uid int
            var username string
            var department string
            var created string
            err = rows.Scan(&uid, &username, &department, &created)
            checkErr(err)
            fmt.Println(uid, username, department, created)
        }
    
        //删除数据
        fmt.Println("删除数据")
        stmt, err = db.Prepare("delete from userinfo where uid=?")
        checkErr(err)
        res, err = stmt.Exec(id)
        checkErr(err)
        affect, err = res.RowsAffected()
        checkErr(err)
        fmt.Println(affect)
    
        db.Close()
    }
    
    func checkErr(err error) {
        if err != nil {
            panic(err)
        }
    }

    注意sqlite3共享锁的问题:参考https://blog.csdn.net/LOVETEDA/article/details/82690498   golang操作sqlite时database is locked 的坑以及rows.Close()      

  • 相关阅读:
    HDU 1333 基础数论 暴力
    HDU 1299 基础数论 分解
    HDU 1211 EXGCD
    HDU 3507 单调队列 斜率优化
    博弈
    std:ios::sync_with_stdio(false);
    NBUT[1220] SPY
    nbut1217 Dinner
    poj2236Wireless Network
    ZOJ Problem Set
  • 原文地址:https://www.cnblogs.com/pu369/p/12290347.html
Copyright © 2011-2022 走看看