【Go】sqlite3包配置和使用

2023-11-07

  • 系统: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)
	}

⭐注意⭐

  • 操作表时,表名要加双引号,避免表名是数字等特殊字符,导致无法创建或连接等;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【Go】sqlite3包配置和使用 的相关文章

  • Golang 网络爬虫 NTLM 身份验证

    Golang 网络抓取工具需要从经过 NTLM 验证的网页中提取信息 有了有效的用户名和密码 网络抓取工具如何与服务器进行 NTLM 4 次握手 以获得对后面受保护网页的访问权限 url username password http www
  • ReverseProxy取决于golang中的request.Body

    我想构建一个 http 反向代理 它检查 HTTP 主体 然后将 HTTP 请求发送到它的上游服务器 你怎么能在 Go 中做到这一点 初始尝试 如下 失败 因为 ReverseProxy 复制传入请求 修改它并发送 但正文已被读取 func
  • 在 Go 中生成随机、固定长度的字节数组

    我有一个字节数组 固定长度为4 token make byte 4 我需要将每个字节设置为随机字节 我怎样才能以最有效的方式做到这一点 这math rand就我而言 方法不提供随机字节函数 也许有一种内置的方法 或者我应该生成一个随机字符串
  • exec git 命令拒绝重定向到 Go 中的文件

    我试图从 go 调用 git log 并将输出重定向到给定文件 cmdArgs string log numstat reverse fmt Sprintf s HEAD 89c98f5ec48c8ac383ea9e27d792c3dc77
  • Go中如何从json字符串中获取键值

    我想尝试从 Go 中的 JSON 获取键值 但我不确定如何操作 我已经能够使用 simplejson 读取 json 值 但是我无法找到如何获取键值 有人能指出我正确的方向和 或帮助我吗 谢谢你 您可以通过执行以下操作来获取 JSON 结构
  • 构建链代码时 ltdl.h 未找到错误

    我正在尝试使用构建链码go build 当我运行 Go build 命令时它的报告 hyperledger fabric vendor github com miekg pkcs11 pkcs11 g o 29 18 fatal error
  • GOPATH值设置

    我用go1 3 1 windows amd64 msi安装go 安装后GOROOT是默认设置 我发现 D Programs Go bin 在 PATH 中 然后我创建一个 GOPATH 环境变量 使用 go get 命令时 出现错误 软件包
  • 鸭子在 Go 中打字

    我想写一个Join函数接受任意对象String 方法 package main import fmt strings type myint int func i myint String string return fmt Sprintf
  • Golang 正则表达式命名组和子匹配

    我正在尝试匹配正则表达式并获取匹配的捕获组名称 当正则表达式仅与字符串匹配一次时 这是有效的 但如果它与字符串匹配多次 SubexpNames不返回重复的名称 这是一个例子 package main import fmt regexp fu
  • 模板中的 bson.ObjectId

    我有一个具有 bson ObjectId 类型的结构 例如如下所示 type Test struct Id bson ObjectId Name string Foo string 我想在 html 模板中呈现它 Name Food a h
  • 解组转义 XML

    在 Go 中 我将如何解码此 XML 响应 我尝试过建立一个自定义UnMarshal方法在我的Answerstruct 但我运气不太好
  • 在 Go 中初始化嵌入结构

    我有以下内容struct其中包含一个net http Request type MyRequest struct http Request PathParams map string string 现在我想初始化匿名内部结构http Req
  • 如何在 Linux 中编写文本模式 GUI? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 当我编写脚本 程序时 我经常想弹出一个简单的文本 gui 来提示输入 我该怎么做 例如 来自 Shel
  • 有队列实现吗?

    任何人都可以建议使用 Go 容器来实现简单快速的 FIF 队列 Go 有 3 种不同的容器 heap list and vector 哪一种更适合实现队列 事实上 如果您想要的是一个基本且易于使用的 fifo 队列 slice 可以满足您所
  • 如何在golang中解析JSON而不需要解组两次

    我有一个 Web 套接字连接 它在 JSON 对象中发送不同类型的消息 并且我想将内容解组到一些已知的结构中 为此 我认为我应该执行以下操作 步骤 1 将 JSON 解组为通用映射 字符串 接口 步骤 2 找到我要找的钥匙 步骤 3 尝试将
  • 将 time.Time 转换为字符串

    我正在尝试将数据库中的一些值添加到 string在围棋中 其中一些是时间戳 我收到错误 无法在数组元素中使用 U Created date 类型 time Time 作为类型字符串 我可以转换吗time Time to string typ
  • Golang 正则表达式在字符串之间替换

    我有一些可能采用以下形式的字符串 MYSTRING MYSTRING n MYSTRING n MYSTRING randomstringwithvariablelength n 我希望能够将其正则表达式为MYSTRING foo 基本上替
  • 如何仅在测试时允许一个包访问另一个包的未导出数据?

    In Go 编程语言 第 11 2 4 节 有一个外部测试访问的示例fmt isSpace 通过声明IsSpace in fmt s export test go文件 这似乎是完美的解决方案 所以这就是我所做的 a a go package
  • 如何关闭 gorm 1.20.0 中的数据库实例

    由于我没有在 Close 函数中找到 gorm 实例 任何帮助将不胜感激 dbURI fmt Sprintf user s password s dbname s port s sslmode s TimeZone s username p
  • RSA OAEP、Golang 加密、Java 解密 -BadPaddingException:解密错误

    我正在尝试解密使用 RSA OAEP 在 Golang 中加密的字符串 但出现 BadPaddingException 解密错误 很难弄清楚我错过了什么 这是Golang加密方法 func encryptString rootPEM io

随机推荐

  • click house索引

    稀疏索引 好处 范围查询过滤比较快 弊端 不适合点对点查询 索引必须依赖物理存储顺序 排序字段a b c 索引字段 a ab abc 索引字段必须是排序字段的前缀 语句级多线程 由于一条数据 不适合高qps的高频短查询 更适合低频的大数据复
  • PCL DBSCAN密度聚类

    目录 一 算法原理 1 密度聚类 2 参考文献 二 代码实现 三 结果展示 四 附 matlab验证代码 一 算法原理 1 密度聚类 密度聚类是将簇定义为密度相连的点的最大集合 能够把具有足够高密度的区域划分为簇 并可在噪声的空间数据库中发
  • Android面试常用面试题

    1 Android手机横竖屏切换的问题及其解决方案 默认情况下 横竖屏切换的时候 系统会销毁当前的Activity 然后新建一个Activity 显然 太浪费资源了 http www cnblogs com zhangkai281 arch
  • 机器学习(machine learning)之AdaBoost算法

    转载自 http blog csdn net haidao2009 article details 7514787 菜鸟最近开始学习machine learning 发现adaboost 挺有趣 就把自己的一些思考写下来 主要参考了http
  • TCP吞吐量的理论计算公式

    源 本篇文章本来是收录AIMD拥塞控制吞吐量的计算公式 Valve游戏公司开源GameNetworkingSockets 1 既支持可靠的数据传输 也支持不可靠的数据传输 数据的传输速率 是直接计算出来的 const int64 k nMi
  • HDLBits刷题_Verilog Language_Module pos

    学习内容 This problem is similar to the previous one module You are given a module named mod a that has 2 outputs and 4 inpu
  • 2019年TI电赛总结

    本人某不知名大学菜鸡一个 近几年比赛分析 首先 TI公司承办了未来好几年的电子设计竞赛 TI杯近几年出题还是很有技术的 省赛好多题目可以说是为国赛做准备的 所以想要参加国赛取得好成绩的同学 就要提前参加省赛或者做一做省赛的相关题目 之前不是
  • 使用.debug_info调试信息查看结构体、位域变量内存分配

    上一篇使用readelf查看了 debug info调试信息 现在我们对它进行分析 首先将调试信息保存到文档中 readelf wi test gt out txt 结构体分析 首先 我在结构体里定义了一个char型和一个double型 编
  • 容器的docker-compose怎样写agent.jar配置 -javaagent和其他环境配置怎么写

    在 Docker Compose 文件中配置 Java Agent 以及其他环境配置时 您需要将这些配置添加到 environment 字段中 以下是一个示例 演示了如何在 Docker Compose 文件中配置 Java Agent 和
  • 盘点各种边缘检测算子

    Sobel算子 原理 Sobel算子是一种基于梯度算子的边缘检测算子 它使用两个3x3的卷积核 分别对图像在水平和垂直方向进行卷积操作 然后将两个方向的梯度响应合并得到边缘强度 特点 Sobel算子简单易实现 计算效率高 对噪声有一定的抑制
  • MES系统的优势和上了MES系统后的成果

    1 辅助排产 2 状态监控 3 进度监控 4 效率统计 5 品质管理 在五大功能的保驾护航下 树字工厂机床管家云具有六大优势 1 花费低 2 上线快 3 使用易 4 功能全 完全具备MES的核心功能 智能辅助排产 进度监控 设备状态监控 生
  • MS5607使用中的问题,温度低于20℃,数值不对

    MS5607使用中的问题 温度低于20 马后炮 因为是网上找的代码 懒得看手册 导致后面低于20摄氏度还会有问题 只好认真的看了手册 发现我的代码是ms5611的 照着手册重新改写后就木有问题了 不能省的地方就别省了 公司使用MS5607设
  • Unity Animator入门:使用Animator和trigger参数做简单的UI动画

    Unity中使用Animator和trigger参数做简单的UI动画 概述 原理 Toast组件构成 添加Animator组件 创建default状态动画 录制hide和show动画 设置loopTime 调整各状态的关系 编写脚本 概述
  • Vcs+Verdi 联调

    lmg vcs lmdown y 等待两分钟 再次输入指令 lmg vcs 激活license 目录 主要参考示例 问题1 需要修改默认的shell 问题2 v 快速在flist添加路径失败 问题0 bash alias verdi 未找到
  • 一张图弄明白开源协议-GPL、BSD、MIT、Mozilla、Apache和LGPL 之间的区别

    导读 在开源软件中经常看到各种协议说明 GPL BSD MIT Mozilla Apache和LGPL 这些协议之间的有什么区别 如何选择合适的开源协议 请看下文 特作记录一篇 以供后续查看 参考 阮一峰的网络日志
  • 图灵完备机

    1936年提出的一种抽象计算模型 它可以模拟任何可计算函数 如果一个计算模型或编程语言具有与图灵机等效的计算能力 那么它就被称为图灵完备的 图灵完备性是计算机科学中的一个重要概念 因为它代表了一种最小化的计算能力标准 一个图灵完备的系统能够
  • 互关,互关,互赞,有关必回,有赞必会,有评论必回

    互关 互关 互赞 有关必回 有赞必会 有评论必回
  • 按位与、按位或、按位异或等等(&

    位运算概述 从现代计算机中所有的数据二进制的形式存储在设备中 即0 1两种状态 计算机对二进制数据进行的运算 都是叫位运算 即将符号位共同参与运算的运算 口说无凭 举一个简单的例子来看下CPU是如何进行计算的 比如这行代码 int a 35
  • 找工作知识储备(3)---从头说12种排序算法:原理、图解、动画视频演示、代码以及笔试面试题目中的应用

    作者 寒小阳 时间 2013年9月 出处 http blog csdn net han xiaoyang article details 12163251 声明 版权所有 转载请注明出处 谢谢 0 前言 从这一部分开始直接切入我们计算机互联
  • 【Go】sqlite3包配置和使用

    系统 Win10 IDE VsCode 1 初始化mod 在项目中先初始化mod 已经初始化过则忽略 打开终端 快捷键Ctrl Shift 执行go mod init xxx xxx为文件夹名 2 获取sqlite3 在golang官网的p