在 Go 中使用 SQLite3 数据库,最常见的方法是使用 github.com/mattn/go-sqlite3 这个库。下面是如何在 Go 中使用 SQLite3 的一个简单指南。

1. 安装 SQLite3 Driver

首先,你需要安装 SQLite3 的 Go 驱动。可以使用以下命令:

go get github.com/mattn/go-sqlite3

2. 导入库

在你的 Go 代码中,你需要导入 database/sqlgithub.com/mattn/go-sqlite3

import (
    "database/sql"
    "log"

    _ "github.com/mattn/go-sqlite3"
)

注意 _ 前缀用于匿名导入,使得该包的 init 函数执行,但不直接使用该包中的任何其他东西。

3. 创建或打开 SQLite 数据库

使用 sql.Open 函数来打开一个数据库,如果数据库不存在,它会被创建:

db, err := sql.Open("sqlite3", "example.db")
if err != nil {
    log.Fatal(err)
}
defer db.Close() // 在函数结束时关闭数据库连接

4. 创建表

可以使用 SQL 语句创建表:

sqlStmt := `CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY, name TEXT);`
_, err = db.Exec(sqlStmt)
if err != nil {
    log.Fatalf("%q: %s", err, sqlStmt)
}

5. 插入数据

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

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

_, err = stmt.Exec("Alice")
if err != nil {
    log.Fatal(err)
}

6. 查询数据

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

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

for rows.Next() {
    var id int
    var name string
    err = rows.Scan(&id, &name)
    if err != nil {
        log.Fatal(err)
    }
    log.Printf("ID: %d, Name: %s", id, name)
}

7. 错误处理

在实际的应用程序中,确保对错误进行适当的处理是至关重要的。在上面的代码中,log.Fatal(err) 用于记录错误并退出程序,你可以根据需要调整错误处理逻辑。

完整示例

以下是一个完整的示例代码,展示了如何使用 SQLite3:

package main

import (
    "database/sql"
    "log"

    _ "github.com/mattn/go-sqlite3"
)

func main() {
    // 打开数据库
    db, err := sql.Open("sqlite3", "example.db")
    if err != nil {
        log.Fatal(err)
    }
    defer db.Close()

    // 创建表
    sqlStmt := `CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY, name TEXT);`
    _, err = db.Exec(sqlStmt)
    if err != nil {
        log.Fatalf("%q: %s", err, sqlStmt)
    }

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

    _, err = stmt.Exec("Alice")
    if err != nil {
        log.Fatal(err)
    }
    _, err = stmt.Exec("Bob")
    if err != nil {
        log.Fatal(err)
    }

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

    for rows.Next() {
        var id int
        var name string
        err = rows.Scan(&id, &name)
        if err != nil {
            log.Fatal(err)
        }
        log.Printf("ID: %d, Name: %s", id, name)
    }

    // 检查查询错误
    err = rows.Err()
    if err != nil {
        log.Fatal(err)
    }
}

孟斯特

声明:本作品采用署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)进行许可,使用时请注明出处。

Author: mengbin

blog: mengbin

Github: mengbin92

cnblogs: 恋水无意

腾讯云开发者社区:孟斯特