Go中使用 SQLite 数据库

一、前言

SQLite 是一个开源的嵌入式关系数据库,实现自包容、零配置、支持事务的 SQL 数据库引擎。其特点是高度便携、使用方便、结构紧凑、高效、可靠。

与其他数据库管理系统不同,SQLite 的安装和运行非常简单,在大多数情况下,只要确保 SQLite 的二进制文件存在即可开始创建、连接和使用数据库。

二、使用

Go 支持 sqlite 的库也比较多,下面介绍github.com/mattn/go-sqlite3库来对SQLite3数库存

1. 引用库

需要引用sqlite3时前面加个_,不然会编译出错。语法基本上和MySQL类似

import (
    "database/sql"

    _ "github.com/mattn/go-sqlite3"
)

2. 打开/创建数据库

在当前目录打开my.db数据库,如果不存在,则创建一个

// 打开/创建
db, err := sql.Open("sqlite3", "./my.db")

// 关闭
db.Close()

3. 创建表

table := `
    CREATE TABLE IF NOT EXISTS user (
        uid INTEGER PRIMARY KEY AUTOINCREMENT,
        name VARCHAR(128) NULL,
        created DATE NULL
    );
    `
_, err = db.Exec(table)
  • 创建一个user表,
  • 表中有一个自增长的uid,
  • 一个128位字符串的name
  • 日期类型的创建时间

4. 插入数据

    stmt, err := db.Prepare("INSERT INTO user(name,  created) values(?,?)")
    if err != nil {
        panic(err)
    }
    // res 为返回结果
    res, err := stmt.Exec("guoke", "2012-12-09")
    if err != nil {
        panic(err)
    }

    // 可以通过res取自动生成的id
    id, err := res.LastInsertId()
    if err != nil {
        panic(err)
    }

5. 删除数据

    stmt, err = db.Prepare("delete from user where uid=?")
     if err != nil {
        panic(err)
    }

    res, err = stmt.Exec(id)
     if err != nil {
        panic(err)
    }

6. 更新数据

     stmt, err := db.Prepare("update %s set name=? where uid=?")
     if stmt == nil || err != nil {
          panic(err)
      }
     _, err = stmt.Exec("guoke3915", 1)
     if err != nil {
          panic(err)
     }

7.查询数据

    rows, err := db.Query("SELECT * FROM user")
    if err != nil {
          panic(err)
     }
    defer rows.Close()

    for rows.Next() {
        var uid int
        var name string
        var created time.Time
        err = rows.Scan(&uid, &name,  &created)
        if err != nil {
          panic(err)
        }

        fmt.Println(uid)
        fmt.Println(name)
        fmt.Println(created)
    }
0%