如何使用Go操作SQLite

 更新时间:2025年10月10日 10:27:16   作者:数据知道  
文章介绍了如何使用Go语言操作SQLite数据库,推荐使用github.com/mattn/go-sqlite3驱动,涵盖了安装驱动、连接数据库、表的创建与删除、数据的增删改查操作,并提供了一个完整的示例代码,这为学习Go语言操作SQLite提供了一个基础案例,感兴趣的朋友一起看看吧

一、驱动选择

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 int
		var name string
		var age int
		err := 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 int
		var name string
		var age int
		err := 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的基础案例。

到此这篇关于如何使用Go操作SQLite的文章就介绍到这了,更多相关go 操作sqlite内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • GO中高效的将int转换为string的方法与源码

    GO中高效的将int转换为string的方法与源码

    本文将从逐步介绍几种在 Go 中将 int 转换为 string 的常见方法,并重点剖析这几种方法在性能上的特点,另外,还会重点介绍 FormatInt 高效的算法实现,需要的朋友可以参考下
    2024-01-01
  • 一文详解Go语言切片是如何扩容的

    一文详解Go语言切片是如何扩容的

    切片是一个拥有相同类型元素的可变长度的序列,它是基于数组类型做的一层封装。它非常灵活,支持自动扩容。所以本文就来看看Go语言切片是如何扩容的吧
    2023-04-04
  • golang内存逃逸分析

    golang内存逃逸分析

    本文主要介绍了golang内存逃逸分析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-06-06
  • Go语言开发框架反射机制及常见函数示例详解

    Go语言开发框架反射机制及常见函数示例详解

    这篇文章主要为大家介绍了Go语言开发框架反射机制及常见函数示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-09-09
  • 浅谈Go 自建库的使用教程与测试

    浅谈Go 自建库的使用教程与测试

    本文主要介绍了Go 自建库的使用教程与测试,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-09-09
  • 一文带你了解Go语言中锁特性和实现

    一文带你了解Go语言中锁特性和实现

    Go语言中的sync包主要提供的对并发操作的支持,标志性的工具有cond(条件变量) once (原子性) 还有 锁,本文会主要向大家介绍Go语言中锁的特性和实现,感兴趣的可以了解下
    2024-03-03
  • go zero微服务实战系服务拆分

    go zero微服务实战系服务拆分

    这篇文章主要为大家介绍了go zero微服务实战系服务拆分的示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-06-06
  • 详解Golang中零拷贝的原理以及实践

    详解Golang中零拷贝的原理以及实践

    零拷贝技术相信大家都有所耳闻,但是本文不仅会讲述零拷贝技术的原理,并将从实际代码出发,看看零拷贝技术在golang中的应用,现在让我们开始吧
    2023-07-07
  • Go语言中的格式化输出占位符的用法详解

    Go语言中的格式化输出占位符的用法详解

    在 Go 语言中,格式化输出是一个非常常用的功能,特别是在处理字符串、数字和其他数据类型时,本文将详细介绍 Go 语言中常用的格式化占位符及其用法,希望对大家有所帮助
    2024-10-10
  • golang判断两个事件是否存在冲突的方法示例

    golang判断两个事件是否存在冲突的方法示例

    这篇文章主要为大家详细介绍了golang判断两个事件是否存在冲突的方法示例,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2023-10-10

最新评论