当前位置: 首页 > 工具软件 > go-sqlite3 > 使用案例 >

【Go】sqlite3包配置和使用

陆和泰
2023-12-01
  • 系统:Win10
  • IDE:VsCode

1 初始化mod

在项目中先初始化mod(已经初始化过则忽略),打开终端(快捷键Ctrl+Shift+~)执行go mod init xxx(xxx为文件夹名)。

2 获取sqlite3

在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

3 使用

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这个文件

4 go中使用sqlite常用语法

4.1 打开/创建数据库

db, err := sql.Open("sqlite3", "./user.db")
checkErr(err)

参数:

  • 数据库类型
  • 数据库路径以及文件名

返回值:

  • *sql.DB
  • error

4.2 创建数据表

	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:日期类型的创建时间

4.3 插入数据

	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来执行

4.4 删除数据

	stmt, err = db.Prepare("delete from student where uid=?")
	checkErr(err)

	res, err = stmt.Exec(1)
	checkErr(err)

uid对应位置的整条数据删除

4.5 更新数据

	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值改为”小蓝“

4.6 查询数据

	//查询数据
	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)
	}

⭐注意⭐

  • 操作表时,表名要加双引号,避免表名是数字等特殊字符,导致无法创建或连接等;
 类似资料: