Go-Sqlite3学习

go-sqlite3 是 Go 语言中用于操作 SQLite 数据库的第三方驱动库。SQLite 是一种轻量级、嵌入式的关系型数据库,适用于小型应用和嵌入式开发场景,而 go-sqlite3 库让我们能够在 Go 项目中轻松使用 SQLite 数据库。

下面是 go-sqlite3 的基本学习与使用指南:

1. 安装 go-sqlite3

要在项目中使用 go-sqlite3,首先需要安装该库。可以使用以下命令安装:

go get github.com/mattn/go-sqlite3

安装完成后,我们就可以在代码中导入它。

2. 打开和关闭数据库

在 Go 中,使用 sql 包的 sql.Open() 方法来连接数据库。go-sqlite3 实际上是一个 database/sql 驱动,所以可以直接用标准库中的 database/sql 包进行操作。

package mainimport ("database/sql""log"_ "github.com/mattn/go-sqlite3" // 导入 SQLite3 驱动
)func main() {// 打开数据库连接db, err := sql.Open("sqlite3", "./test.db")if err != nil {log.Fatal(err)}defer db.Close()// 检查连接是否成功err = db.Ping()if err != nil {log.Fatal(err)}log.Println("数据库连接成功")
}

3. 创建表

我们可以使用 Exec 方法执行 SQL 语句,比如创建一张表:

func createTable(db *sql.DB) {query := `CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY AUTOINCREMENT,name TEXT NOT NULL,age INTEGER);`_, err := db.Exec(query)if err != nil {log.Fatalf("创建表失败: %v", err)}log.Println("表创建成功")
}

4. 插入数据

使用 Exec 方法可以插入数据:

func insertUser(db *sql.DB, name string, age int) {query := "INSERT INTO users (name, age) VALUES (?, ?)"_, err := db.Exec(query, name, age)if err != nil {log.Fatalf("插入数据失败: %v", err)}log.Println("数据插入成功")
}

5. 查询数据

可以使用 QueryQueryRow 方法来查询数据:

func queryUsers(db *sql.DB) {rows, err := db.Query("SELECT id, name, age FROM users")if err != nil {log.Fatalf("查询数据失败: %v", err)}defer rows.Close()for rows.Next() {var id intvar name stringvar age interr := rows.Scan(&id, &name, &age)if err != nil {log.Fatalf("数据扫描失败: %v", err)}log.Printf("用户 ID: %d, 名称: %s, 年龄: %d\n", id, name, age)}
}

6. 更新数据

可以使用 Exec 方法执行更新操作:

func updateUser(db *sql.DB, id int, age int) {query := "UPDATE users SET age = ? WHERE id = ?"_, err := db.Exec(query, age, id)if err != nil {log.Fatalf("更新数据失败: %v", err)}log.Println("数据更新成功")
}

7. 删除数据

使用 Exec 方法可以删除数据:

func deleteUser(db *sql.DB, id int) {query := "DELETE FROM users WHERE id = ?"_, err := db.Exec(query, id)if err != nil {log.Fatalf("删除数据失败: %v", err)}log.Println("数据删除成功")
}

8. 完整示例

func main() {db, err := sql.Open("sqlite3", "./test.db")if err != nil {log.Fatal(err)}defer db.Close()createTable(db)insertUser(db, "Alice", 30)insertUser(db, "Bob", 25)queryUsers(db)updateUser(db, 1, 32)deleteUser(db, 2)
}

注意事项

  1. 数据安全:尽量使用参数化查询(?)来防止 SQL 注入攻击。
  2. 连接管理sql.DB 连接是线程安全的,建议在全局范围内维护数据库连接。
  3. 错误处理:注意处理每个数据库操作的错误,确保数据一致性。

这样,我们就可以在 Go 中使用 go-sqlite3 驱动来操作 SQLite 数据库了。希望这对你学习 go-sqlite3 有帮助!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/58765.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

int类型的长度为什么不统一?int类型和硬件寄存器有多统一?数据类型长度是编译器决定的?

int类型的长度为什么不统一? 以C语言为例,它为了支持不同硬件平台,在计算机早期,硬件资源包括内存资源非常紧张,C语言标准不能直接规定int类型就是16位或者32位,这样会造成其它平台不能运行。故,标准做了取…

2024最新Twitter养号全面指南,品牌起号必看!

X (Twitter)作为活跃用户数以亿计的社交媒体平台,用户数依然在不断增长,其中巨大的流量吸引着个人用户与品牌和卖家。 Twitter养号是有必要的,有大量案例表明养好号,可以大幅度降低账号被冻结的几率,并提升账号的稳定…

百度如何打造AI原生研发新范式?

👉点击即可下载《百度AI原生研发新范式实践》资料 2024年10月23-25日,2024 NJSD技术盛典暨第十届NJSD软件开发者大会、第八届IAS互联网架构大会在南京召开。本届大会邀请了工业界和学术界的专家,优秀的工程师和产品经理,以及其它行…

基于大语言模型(LLM)自主Agent 智能体综述

近年来,LLM(Large Language Model)取得了显著成功,并显示出了达到人类智能的巨大潜力。基于这种能力,使用LLM作为中央控制器来构建自助Agent,以获得类人决策能力。 Autonomous agents 又被称为智能体、Agent。指能够通过感知周围环境、进行规划以及执行动作来完成既定任务。…

电脑怎么设置开机密码:保障个人信息安全的第一步

在数字化时代,个人信息的安全至关重要。电脑作为我们日常工作和生活中不可或缺的设备,存储了大量的私人数据和敏感信息。为了防止未经授权的访问,设置开机密码是保护个人隐私和信息安全的基本措施之一。本文将详细介绍如何在不同操作系统下为…

分析 std::optional 的使用与常见错误

文章目录 引言常见错误及解决方案1. 错误使用 std::optional 变量进行算术运算2. 错误检查 std::optional 是否有值3. 忽视 std::optional 的默认值 结论 引言 std::optional 是 C17 引入的一个模板类,用于表示可能有也可能没有值的情况。它特别适用于函数返回值&a…

DB-GPT系列(二):DB-GPT部署(镜像一键部署、源码部署)

一、简介 DB-GPT 是一个开源项目,其将大语言模型 LLM 与数据库紧密结合。该项目主要致力于探索如何让预训练的大规模语言模型(例如 GPT)能够直接与数据库进行交互,从而生成更为准确且信息丰富的回答。 DB-GPT部署后能否直接使用…

8051汇编执行RET函数返回后总是复位到ORG 00H的位置,问题如何解决?

8051汇编执行RET函数返回后总是复位到ORG 00H的位置,问题的解决方法 新手写8051汇编时,如果RESET一开始时就直接使用LCALL,则RET返回时会出错,每次都跳到程序开始的位置。因为LCALL和RET需要依靠堆栈存储程序指针,而此…

Web组件之 Listener (监听器)

文章目录 1.1 Listener概述1.2 Listener快速入门① xml版本② 注解版本 1.3 案例:模拟spring框架 1.1 Listener概述 ​ JavaWeb 中的监听器是监听 ServletContext HttpSession HttpServletRequest 三个数据域对象创建和销毁以及监听数据域对象中数据的变化&#xf…

【论文翻译】IJCAI 2019 | Graph WaveNet:用于深度时空图建模的Graph WaveNet

论文题目Graph WaveNet for Deep Spatial-Temporal Graph Modeling作者团队Zonghan Wu, Shirui Pan, Guodong Long, Jing Jiang, Chengqi Zhang机构澳大利亚悉尼科技大学人工智能中心 (UTS) 和 澳大利亚莫纳什大学发表会议IJCAI 2019论文链接https://www.ijcai.org/proceedings…

Java数组的定义与使用

今天来学习Java数组的定义与使用 目录 1 数组的基本概念1.1 数组的意义1.2 数组的定义1.3 数组的创建及初始化1.3.1 数组的创建1.3.2 数组的初始化 1.4 数组的使用1.4.1 数组中的元素访问1.4.2 遍历数组运行结果运行结果 2 数组是引用类型2.1 初始 JVM 的内存分布2.2 基本类型变…

https://tieba.baidu.com/p/9247698007

微深节能的库区智能化无人天车管理系统结合了格雷母线技术,提供了一种高精度的定位解决方案。格雷母线系统能够实现连续或断续的位置检测,精度高达≤5mm,适用于需要高精度作业的场景,如货物搬运和堆放。这种系统通过实时交互&…

创作里程碑:纪念日回顾与展望

目录 机缘:创作者初心 1. 实战项目 2. 日常学习 3. 技术交流 4. 总结 收获:创作者动力 创作与工作、学习的关系 憧憬:职业规划与创作规划 职业规划: 创作规划: 机缘:创作者初心 回望自己踏上…

二叉树计算

#题目描述: 给出一个二叉树如下图所示: 6/ \7 9\ / -2 6 请由该二叉树生成一个新的二叉树,它满足其树中的每个节点将包含原始树中的左子树和右子树的和。 20(7-296)/ \-2 6\ / 0 0 左子树表示该节点左侧叶子节…

软考(中级-软件设计师)数据库篇(1101)

第6章 数据库系统基础知识 一、基本概念 1、数据库 数据库(Database ,DB)是指长期存储在计算机内的、有组织的、可共享的数据集合。数据库中的数据按一定的数据模型组织、描述和存储,具有较小的冗余度、较高的数据独立性和扩展…

go-zero 的使用

目录 1. 生成 user api 服务 2. 生成 user rpc 服务 3. 生成 user model 模型 4. 编写 user rpc 服务 1 修改配置文件 user.yaml 2 添加 user model 依赖 3 添加用户登录逻辑 Login 5. 编写 user api 服务 1 修改配置文件user.yaml 2 添加 user rpc 依赖 3 添加用户…

基金委:目前资助率过低,危害大,应提升至30~35%,增大青年、面上项目经费

国家基金委 近日,国家基金委发表题为《近十年 NSF资助率和资助强度上升 对我国科学基金资助工作的启示》文章,文章基于近十年 NSF总体资助变化,提出对我国科学基金资助工作启示,阐述了国家自然基金项目资助率下降情况、危害,并提…

ubuntu禁止自动更新设置

背景概述 从CentOS变更到uBuntu或多或少会遇到一些坑,今天分享一个。 在Ubuntu系统中,自动更新是一个既方便又引发争议的功能。它可以帮助用户保持系统的最新状态,但有时也会因为自动更新而导致系统不稳定或不兼容。 Ubuntu系统的自动更新主…

NPM 包开发与优化全面指南

前言 Hey, 我是 Immerse系列文章首发于【Immerse】,更多内容请关注该网站转载说明:转载请注明原文出处及版权声明! 1. 理解 NPM 包的结构 1.1 package.json 文件:包的核心 package.json文件是 NPM 包的中央配置,定…

学Linux的第六天

目录 账户和组管理 工作组管理 创建工作组groupadd 修改工作组groupmod 添加/删除组成员gpasswd 删除工作组groupdel 查看用户登录系统的情况 users查看当前登录系统的用户 last命令 lastlog命令 w命令 显示登录到系统的用户信息 who命令 Linux文件系统权限 文件…