问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

Go语言中SQLite3数据库使用详解

创作时间:
作者:
@小白创作中心

Go语言中SQLite3数据库使用详解

引用
CSDN
1.
https://blog.csdn.net/qq_14829643/article/details/136954802

SQLite是一个广泛使用的嵌入式SQL数据库引擎,以其轻量级和自足性而闻名。Go语言,以其简洁的语法和强大的性能而受到开发者的青睐,通过database/sql包和专用的SQLite3驱动程序提供了对SQLite数据库的支持。本文旨在指导如何在Go语言中使用SQLite3,包括设置环境、连接数据库、执行SQL语句、处理查询结果等方面。

环境准备和安装

在开始之前,确保您的系统已安装Go环境。接着,您需要安装SQLite3的Go语言驱动。最流行的驱动是mattn/go-sqlite3,可以通过如下命令安装:

go get -u github.com/mattn/go-sqlite3

请注意,该驱动使用cgo,因此需要C编译器环境。

打开数据库连接

首先,导入必要的包:

import (
    "database/sql"
    _ "github.com/mattn/go-sqlite3"
)

然后,可以使用sql.Open函数打开一个SQLite数据库文件:

db, err := sql.Open("sqlite3", "your_database.db")
if err != nil {
    log.Fatal(err)
}
defer db.Close()

这里的your_database.db是数据库文件的路径,如果文件不存在,SQLite将会创建一个新文件。

创建表

使用Exec方法执行SQL语句创建一个新表:

createTableSQL := `CREATE TABLE IF NOT EXISTS projects (
    "id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,   
    "name" TEXT,
    "description" TEXT
);`

_, err = db.Exec(createTableSQL)
if err != nil {
    log.Fatal(err)
}

插入数据

插入数据到表中,可以使用预处理语句:

stmt, err := db.Prepare("INSERT INTO projects(name, description) VALUES(?, ?)")
if err != nil {
    log.Fatal(err)
}
defer stmt.Close()

_, err = stmt.Exec("My Project", "This is a sample project")
if err != nil {
    log.Fatal(err)
}

查询数据

查询表中的数据并处理结果:

rows, err := db.Query("SELECT id, name, description FROM projects")
if err != nil {
    log.Fatal(err)
}
defer rows.Close()

for rows.Next() {
    var id int
    var name, description string
    err = rows.Scan(&id, &name, &description)
    if err != nil {
        log.Fatal(err)
    }
    fmt.Println(id, name, description)
}

完整代码

package main

import (
    "database/sql"
    "fmt"
    "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()

    // 创建表
    createTableSQL := `CREATE TABLE IF NOT EXISTS projects (
        "id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,   
        "name" TEXT,
        "description" TEXT
    );`
    _, err = db.Exec(createTableSQL)
    if err != nil {
        log.Fatal(err)
    }

    // 插入数据
    stmt, err := db.Prepare("INSERT INTO projects(name, description) VALUES(?, ?)")
    if err != nil {
        log.Fatal(err)
    }
    defer stmt.Close()

    _, err = stmt.Exec("My Project", "This is a sample project")
    if err != nil {
        log.Fatal(err)
    }

    // 查询数据
    rows, err := db.Query("SELECT id, name, description FROM projects")
    if err != nil {
        log.Fatal(err)
    }
    defer rows.Close()

    for rows.Next() {
        var id int
        var name, description string
        err = rows.Scan(&id, &name, &description)
        if err != nil {
            log.Fatal(err)
        }
        fmt.Println(id, name, description)
    }

    // 检查查询过程中可能出现的错误
    err = rows.Err()
    if err != nil {
        log.Fatal(err)
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65

执行效果

总结

在Go语言中使用SQLite3,可以为您的应用提供轻量级且高效的数据存储解决方案。通过上述步骤,您可以开始在Go项目中集成和操作SQLite数据库,执行数据的增删改查操作。

在实际开发中,除了基本的数据库操作外,还需要考虑错误处理、事务控制、连接池管理等高级功能的实现,以确保应用的健壮性和性能。希望本文能为您在Go语言中使用SQLite3提供一个良好的起点。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号