栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Go语言

【Go】sqlite3包配置和使用

Go语言 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【Go】sqlite3包配置和使用

  • 系统: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)
	}
⭐注意⭐
  • 操作表时,表名要加双引号,避免表名是数字等特殊字符,导致无法创建或连接等;
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/991579.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号