侧边栏壁纸
博主头像
微流 - 这里记录值得分享的内容

行动起来,活在当下

  • 累计撰写 16 篇文章
  • 累计创建 9 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录
Go

Go:操作 SQLite 数据库

引言

SQLite 是一种轻量级的关系型数据库,因其简单易用和高效的性能而受到开发者的青睐。在 Go 语言中,github.com/mattn/go-sqlite3 驱动为我们提供了与 SQLite 数据库交互的便捷方式。本文将对该驱动进行简要介绍,并展示一些基本操作。

驱动介绍

go-sqlite3 是一个用 Go 语言编写的 SQLite 驱动,兼容 Go 的 database/sql 包,允许开发者以结构化的方式与 SQLite 数据库进行交互。这个驱动支持多种 SQLite 特性,包括事务、查询、插入等,适合需要轻量级存储解决方案的项目。

安装与配置

要使用 go-sqlite3 驱动,首先需要在项目中安装它。通过以下命令安装:

go get github.com/mattn/go-sqlite3

然后,导入相关包:

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

基本操作

打开数据库

使用 sql.Open 函数打开或创建一个 SQLite 数据库。第一个参数是驱动名(这里是 "sqlite3"),第二个参数是数据库文件的路径。如果数据库文件不存在,SQLite 会自动创建它。

db, err := sql.Open("sqlite3", "./example.db")
if err != nil {
    log.Fatal(err) // 如果打开数据库失败,记录错误并退出
}
defer db.Close() // 确保在函数结束时关闭数据库连接

在打开数据库后,应该使用 db.Ping 检查数据库是否可用。这是一个良好的实践,可以确保连接正常:

if err := db.Ping(); err != nil {
    log.Fatal(err) // 如果连接不可用,记录错误并退出
}

连接成功后,就可以执行 SQL 语句了。以下是常见的操作示例

创建表

创建表是数据库操作的第一步。以下代码示例展示了如何在数据库中创建一个简单的用户表。

sqlStmt := `CREATE TABLE IF NOT EXISTS users (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    name TEXT NOT NULL,
    age INTEGER
);`
_, err := db.Exec(sqlStmt)
if err != nil {
    log.Fatalf("%q: %s\n", err, sqlStmt)
}
  • 使用 CREATE TABLE IF NOT EXISTS 可以避免重复创建相同表。

插入数据

插入数据使用 INSERT INTO 语句。可以使用准备语句来提高安全性和性能。

stmt, err := db.Prepare("INSERT INTO users(name, age) VALUES(?, ?)")
if err != nil {
    log.Fatal(err)
}
defer stmt.Close()
​
_, err = stmt.Exec("Alice", 30)
if err != nil {
    log.Fatal(err)
}
​
_, err = stmt.Exec("Bob", 25)
if err != nil {
    log.Fatal(err)
}
  • Prepare语句可以防止 SQL 注入,通过问号占位符在执行时传入参数。

查询数据

查询数据使用 SELECT 语句。可以使用 Query 方法获取结果集。

rows, err := db.Query("SELECT id, name, age FROM users")
if err != nil {
    log.Fatal(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.Fatal(err)
    }
    log.Printf("User: %d, Name: %s, Age: %d\n", id, name, age)
}
  • 使用 rows.Scan 将查询结果逐行读取并赋值给相应的变量。确保在循环结束后关闭 rows

更新数据

更新数据使用 UPDATE 语句,下面是一个示例:

go复制代码stmt, err = db.Prepare("UPDATE users SET age = ? WHERE name = ?")
if err != nil {
    log.Fatal(err)
}
defer stmt.Close()
​
_, err = stmt.Exec(31, "Alice")
if err != nil {
    log.Fatal(err)
}
  • 通过指定条件(这里是姓名)来更新特定记录的字段。

删除数据

删除数据使用 DELETE FROM 语句,示例如下:

stmt, err = db.Prepare("DELETE FROM users WHERE name = ?")
if err != nil {
    log.Fatal(err)
}
defer stmt.Close()

_, err = stmt.Exec("Bob")
if err != nil {
    log.Fatal(err)
}
  • 可以通过条件删除特定的记录,defer确保在执行后关闭Prepare语句。

结论

以上是连接 SQLite3 数据库后的基本操作,包括创建表、插入、查询、更新和删除数据。这些操作是数据库应用的基础,掌握这些内容有助于开发更复杂的功能。希望这些示例对你在实际开发中有所帮助!

1
  1. 支付宝打赏

    qrcode alipay
  2. 微信打赏

    qrcode weixin

评论区