Go-Sqlite3学习

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

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

1. 安装 go-sqlite3

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

shell 复制代码
go get github.com/mattn/go-sqlite3

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

2. 打开和关闭数据库

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

go 复制代码
package main

import (
    "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 语句,比如创建一张表:

go 复制代码
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 方法可以插入数据:

go 复制代码
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. 查询数据

可以使用 Query 或 QueryRow 方法来查询数据:

go 复制代码
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 int
        var name string
        var age int
        err := rows.Scan(&id, &name, &age)
        if err != nil {
            log.Fatalf("数据扫描失败: %v", err)
        }
        log.Printf("用户 ID: %d, 名称: %s, 年龄: %d\n", id, name, age)
    }
}

6. 更新数据

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

go 复制代码
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 方法可以删除数据:

go 复制代码
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. 完整示例

go 复制代码
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 有帮助!

相关推荐
choumou_M1 小时前
算法_1:由浅入深学习快速排序QuickSort
学习·算法·排序算法
蒸蒸yyyyzwd6 小时前
后端学习笔记 day111
笔记·学习
叼烟扛炮6 小时前
[LangChain] 学习笔记(08):工具调用底层闭环与第三方搜索(Tavily)实战
人工智能·笔记·学习·langchain
Century_Dragon7 小时前
让新能源故障诊断实训“触手可及“——仿真教学软件(VR)介绍
学习
楚山之石8 小时前
【Radiology】影像组学的标准化与可重复性:IBSI 卷积滤波器共识及其未能覆盖的环节
人工智能·学习·机器学习·mri
小李不想当小白9 小时前
HAL库之UART(STM32 HAL库学习笔记)
笔记·stm32·单片机·嵌入式硬件·学习·嵌入式
利威尔xu9 小时前
Go map 底层崩溃:3 个 goroutine 并发写同一张 map,fatal error 崩掉整个服务
golang·源码·map·并发·后端开发
旖旎夜光10 小时前
【C++ 基础入门】C++ 多态(中):虚函数表、多态原理与动静绑定
开发语言·c++·笔记·学习
旖旎夜光11 小时前
【C++ 基础入门】C++多态(下):单/多继承虚表、多态补充与 21 道高频题
开发语言·c++·笔记·学习
叼烟扛炮16 小时前
[LangChain] 学习笔记(07):大模型长出手脚——工具(Tools)定义与调用闭环
笔记·学习·langchain