当前位置: 首页 > news >正文

Go语言:用Go操作SQLite详解

文章目录

    • 一、驱动选择
    • 二、数据库连接
      • 2.1 安装驱动
      • 2.2 连接数据库
    • 三、表操作
      • 3.1 创建表
      • 3.2 删除表
    • 四、增删改查操作
      • 4.1 插入数据
      • 4.2 查询数据
      • 4.3 更新数据
      • 4.4删除数据
    • 五、完整案例

一、驱动选择

Go语言通过标准库database/sql结合第三方驱动可以方便地操作SQLite数据库。Go语言支持SQLite的驱动较多,但推荐使用支持database/sql接口的驱动,例如github.com/mattn/go-sqlite3。该驱动功能完善,兼容性强,是Go语言操作SQLite的主流选择。

官方文档:https://mattn.github.io/go-sqlite3/

二、数据库连接

2.1 安装驱动

首先,通过以下命令安装go-sqlite3驱动:

go get github.com/mattn/go-sqlite3

2.2 连接数据库

以下代码展示了如何连接SQLite数据库:

package main
import ("database/sql""fmt""log"_ "github.com/mattn/go-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)}fmt.Println("成功连接到SQLite数据库")
}

三、表操作

3.1 创建表

以下代码展示了如何创建一个用户表:

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.Fatal(err)}fmt.Println("表创建成功或已存在")
}

3.2 删除表

如果需要删除表,可以使用以下代码:

func dropTable(db *sql.DB) {query := "DROP TABLE IF EXISTS users;"_, err := db.Exec(query)if err != nil {log.Fatal(err)}fmt.Println("表删除成功")
}

四、增删改查操作

4.1 插入数据

以下代码展示了如何向用户表中插入数据:

func insertUser(db *sql.DB, name string, age int) {query := "INSERT INTO users (name, age) VALUES (?, ?);"result, err := db.Exec(query, name, age)if err != nil {log.Fatal(err)}id, _ := result.LastInsertId()fmt.Printf("插入成功,用户ID: %d\n", id)
}

4.2 查询数据

以下代码展示了如何查询用户表中的数据:

func queryUsers(db *sql.DB) {query := "SELECT id, name, age FROM users;"rows, err := db.Query(query)if err != nil {log.Fatal(err)}defer rows.Close()fmt.Println("用户列表:")for rows.Next() {var id intvar name stringvar age interr := rows.Scan(&id, &name, &age)if err != nil {log.Fatal(err)}fmt.Printf("ID: %d, 姓名: %s, 年龄: %d\n", id, name, age)}
}

4.3 更新数据

以下代码展示了如何更新用户表中的数据:

func updateUser(db *sql.DB, id int, newName string, newAge int) {query := "UPDATE users SET name = ?, age = ? WHERE id = ?;"result, err := db.Exec(query, newName, newAge, id)if err != nil {log.Fatal(err)}rowsAffected, _ := result.RowsAffected()fmt.Printf("更新成功,影响行数: %d\n", rowsAffected)
}

4.4删除数据

以下代码展示了如何删除用户表中的数据:

func deleteUser(db *sql.DB, id int) {query := "DELETE FROM users WHERE id = ?;"result, err := db.Exec(query, id)if err != nil {log.Fatal(err)}rowsAffected, _ := result.RowsAffected()fmt.Printf("删除成功,影响行数: %d\n", rowsAffected)
}

五、完整案例

以下是一个完整的示例,包含上述所有操作:

package main
import ("database/sql""fmt""log"_ "github.com/mattn/go-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)}fmt.Println("成功连接到SQLite数据库")createTable(db)insertUser(db, "张三", 25)insertUser(db, "李四", 30)queryUsers(db)updateUser(db, 1, "张三改", 26)queryUsers(db)deleteUser(db, 2)queryUsers(db)
}
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.Fatal(err)}fmt.Println("表创建成功或已存在")
}
func insertUser(db *sql.DB, name string, age int) {query := "INSERT INTO users (name, age) VALUES (?, ?);"result, err := db.Exec(query, name, age)if err != nil {log.Fatal(err)}id, _ := result.LastInsertId()fmt.Printf("插入成功,用户ID: %d\n", id)
}
func queryUsers(db *sql.DB) {query := "SELECT id, name, age FROM users;"rows, err := db.Query(query)if err != nil {log.Fatal(err)}defer rows.Close()fmt.Println("用户列表:")for rows.Next() {var id intvar name stringvar age interr := rows.Scan(&id, &name, &age)if err != nil {log.Fatal(err)}fmt.Printf("ID: %d, 姓名: %s, 年龄: %d\n", id, name, age)}
}
func updateUser(db *sql.DB, id int, newName string, newAge int) {query := "UPDATE users SET name = ?, age = ? WHERE id = ?;"result, err := db.Exec(query, newName, newAge, id)if err != nil {log.Fatal(err)}rowsAffected, _ := result.RowsAffected()fmt.Printf("更新成功,影响行数: %d\n", rowsAffected)
}
func deleteUser(db *sql.DB, id int) {query := "DELETE FROM users WHERE id = ?;"result, err := db.Exec(query, id)if err != nil {log.Fatal(err)}rowsAffected, _ := result.RowsAffected()fmt.Printf("删除成功,影响行数: %d\n", rowsAffected)
}

总结:Go语言通过database/sqlgo-sqlite3驱动可以高效地操作SQLite数据库。上述代码涵盖了数据库连接、表操作以及增删改查的完整流程,适合作为学习Go语言操作SQLite的基础案例。

http://www.dtcms.com/a/445955.html

相关文章:

  • arp static 概念及题目
  • 十大高端网站定制设计wordpress千万数据优化
  • 【学习笔记】kafka权威指南——第1章 初识kafka
  • 门户网站是指wordpress 特色照片
  • 玩转Pod调度及K8S集群的扩缩容实战案例
  • 数组——双指针:26.删除排序数组中的重复项
  • 【面板数据】上市公司行政处罚数据集(2003-2023年)
  • 低时延低复杂度QC-LDPC 编码技术(二)
  • php 8.3.26 更新日志
  • 【漫士】傅里叶变换,不过就是坐标分解而言
  • 详解WebSocket及其妙用
  • LVS深度解析:从原理到实战的负载均衡完全指南
  • 谭海波博客简介 wordpress株洲网站seo优化价格
  • 通用定时器_输出比较介绍及案例实践
  • FPGA自学笔记(正点原子ZYNQ7020):1.Vivado软件安装与点灯
  • 6. linux shell命令(3)进程管理相关命令
  • 临清网站优化做网站必须托管服务器吗
  • 依赖注入的好处和不用依赖注入的对比
  • KAN(Kolmogorov-Arnold Networks)通俗理解
  • 李飞飞物理世界 AI:价值维度、技术瓶颈与突破路径研究
  • 企业网站建设网站优化推广网站开发连接效果
  • k8s学习(二)——kubernetes整体架构及组件解析
  • K8s学习笔记(十三) StatefulSet
  • k8s学习-pod的生命周期
  • 校园网站建设申请报告企业网站建设在国内现状
  • php 8.4.1 更新日志
  • VR大空间资料 01 —— 常用VR框架对比
  • 重庆渝中区企业网站建设哪家专业建湖人才网官网登录
  • 【Linux】IP
  • 近红外相机在机器视觉检测中的应用