一、前言
SQLite 是一个开源的嵌入式关系数据库,实现自包容、零配置、支持事务的 SQL 数据库引擎。其特点是高度便携、使用方便、结构紧凑、高效、可靠。
与其他数据库管理系统不同,SQLite 的安装和运行非常简单,在大多数情况下,只要确保 SQLite 的二进制文件存在即可开始创建、连接和使用数据库。
二、使用
Go 支持 sqlite 的库也比较多,下面介绍github.com/mattn/go-sqlite3库来对SQLite3数库存
- mattn/go-sqlite3基于cgo,Windows中cgo环境安装
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)
}