在项目中先初始化mod(已经初始化过则忽略),打开终端(快捷键Ctrl+Shift+~)执行go mod init xxx
(xxx为文件夹名)。
在golang官网的pkg搜索sqlite3,搜索到的第一个包,复制地址github.com/mattn/go-sqlite3
;
回到终端,输入go get -u github.com/mattn/go-sqlite3
,go get -u命令会将项目中的包升级到最新的次要版本或者修订版本;
有可能会因为网络原因导致失败,可以多试几次,或者更改代理:
set GO111MODULE=on
或者 set GO111MODULE=auto
,如果已经是这两者之一则不需要重复执行set GOPROXY=https://goproxy.cn,direct
,这个设置或许会解决你的get不了的问题,实在不行只有改源码了成功获取sqlite包会输出:go: added github.com/mattn/go-sqlite3 v1.14.12
import _ "github.com/mattn/go-sqlite3"
测试代码
func InitOpen() {
db, err := sql.Open("sqlite3", "./user.db")
checkErr(err)
fmt.Println("创建数据表")
sql_table := `
CREATE TABLE IF NOT EXISTS "student"(
"name" VARCHAR(64) NULL,
"age" VARCHAR(64) NULL,
"class" VARCHAR(64) NULL
)`
db.Exec(sql_table)
//插入数据
stmt, err := db.Prepare("INSERT INTO student(name, age, class) values(?,?,?)")
checkErr(err)
res, err := stmt.Exec("小明", "12", "六年级一班")
checkErr(err)
id, err := res.LastInsertId()
checkErr(err)
fmt.Println(id)
}
func checkErr(err error) {
if err != nil {
panic(err)
}
}
调用后会生成user.db这个文件
db, err := sql.Open("sqlite3", "./user.db")
checkErr(err)
参数:
返回值:
sql_table := `
CREATE TABLE IF NOT EXISTS "student"(
"uid" INTEGER PRIMARY KEY AUTOINCREMENT,
"name" VARCHAR(64) NULL,
"age" VARCHAR(64) NULL,
"class" VARCHAR(64) NULL,
"created" DATE NULL
)`
db.Exec(sql_table)
语句含义为:如果该表不存在则创建表;
表名为:student
表中元素:
uid:int类型,一个自增长的id
name:char类型,大小为64,内容初始化为空
age:同上
class:同上
created:日期类型的创建时间
stmt, err := db.Prepare("INSERT INTO student(name, age, class, created) values(?,?,?,?)")
checkErr(err)
res, err := stmt.Exec("小明", "12", "六年级一班","2022-02-22")
checkErr(err)
//返回数据库生成的整数。当插入新行时,自动递增
id, err := res.LastInsertId()
checkErr(err)
fmt.Println(id)
将"小明", “12”, “六年级一班”,"2022-02-22"四个元素插入表中对应列,通过Exec
来执行
stmt, err = db.Prepare("delete from student where uid=?")
checkErr(err)
res, err = stmt.Exec(1)
checkErr(err)
将uid对应位置的整条数据删除
stmt, err = db.Prepare("update student set name=? where uid=?")
checkErr(err)
res, err = stmt.Exec("小蓝", 3)
checkErr(err)
affect, err := res.RowsAffected() //返回受影响的行数。更新、插入、删除
checkErr(err)
fmt.Println(affect)
将uid对应位置的name值改为”小蓝“
//查询数据
rows, err := db.Query("select * from student")
checkErr(err)
for rows.Next() {
var uid int
var name string
var age string
var class string
var createdDate string
err = rows.Scan(&uid, &name, &age, &class, &createdDate)
checkErr(err)
fmt.Println(uid)
fmt.Println(name)
fmt.Println(age)
fmt.Println(class)
fmt.Println(createdDate)
}