TypechoJoeTheme

至尊技术网

统计
登录
用户名
密码

快速入门:使用Go语言操作SQLite数据库

2025-08-21
/
0 评论
/
2 阅读
/
正在检测是否收录...
08/21

快速入门:使用Go语言操作SQLite数据库

关键词:Go语言 SQLite 数据库操作 增删改查 轻量级数据库
描述:本文详细介绍如何在Go语言中连接和操作SQLite数据库,包含建表、增删改查等完整示例代码,适合快速上手嵌入式数据库开发。


一、为什么选择SQLite?

SQLite作为轻量级的嵌入式数据库,在Go生态中有着独特的优势。它不需要独立的服务器进程,数据直接存储在单一磁盘文件中,特别适合开发小型应用、移动应用或需要本地存储的场景。与MySQL等大型数据库相比,SQLite的零配置特性让开发者可以更专注于业务逻辑的实现。

二、环境准备

在开始之前,确保已安装:
1. Go 1.16+ 开发环境
2. SQLite3 命令行工具(仅用于调试)
3. 第三方驱动库:github.com/mattn/go-sqlite3

安装驱动:
bash go get github.com/mattn/go-sqlite3

三、建立数据库连接

go
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("成功连接数据库!")

}

四、基础操作实战

1. 创建数据表

go
func createTable(db *sql.DB) {
sqlStmt := CREATE TABLE IF NOT EXISTS users ( id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL, email TEXT UNIQUE, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP );

_, err := db.Exec(sqlStmt)
if err != nil {
    log.Printf("%q: %s\n", err, sqlStmt)
    return
}
fmt.Println("表创建成功")

}

2. 插入数据

go
func insertUser(db *sql.DB, name, email string) {
stmt, err := db.Prepare("INSERT INTO users(name, email) VALUES(?, ?)")
if err != nil {
log.Fatal(err)
}
defer stmt.Close()

res, err := stmt.Exec(name, email)
if err != nil {
    log.Fatal(err)
}

id, _ := res.LastInsertId()
fmt.Printf("插入成功,ID为 %d\n", id)

}

3. 查询数据

go
func queryUsers(db *sql.DB) {
rows, err := db.Query("SELECT id, name, email FROM users")
if err != nil {
log.Fatal(err)
}
defer rows.Close()

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

}

4. 事务处理

go
func transactionDemo(db *sql.DB) {
tx, err := db.Begin()
if err != nil {
log.Fatal(err)
}

defer func() {
    if p := recover(); p != nil {
        tx.Rollback()
        panic(p)
    } else if err != nil {
        tx.Rollback()
    } else {
        err = tx.Commit()
    }
}()

_, err = tx.Exec("UPDATE users SET name = ? WHERE id = ?", "张三", 1)
if err != nil {
    return
}
fmt.Println("事务执行成功")

}

五、性能优化建议

  1. 连接池配置:通过db.SetMaxOpenConns()设置合理的连接数
  2. 预处理语句:重用Prepare语句减少解析开销
  3. 批量操作:使用事务处理批量INSERT/UPDATE
  4. WAL模式:启用Write-Ahead Logging提升并发性能
    go db.Exec("PRAGMA journal_mode=WAL;")
朗读
赞(0)
版权属于:

至尊技术网

本文链接:

https://www.zzwws.cn/archives/36317/(转载时请注明本文出处及文章链接)

评论 (0)

人生倒计时

今日已经过去小时
这周已经过去
本月已经过去
今年已经过去个月

最新回复

  1. 强强强
    2025-04-07
  2. jesse
    2025-01-16
  3. sowxkkxwwk
    2024-11-20
  4. zpzscldkea
    2024-11-20
  5. bruvoaaiju
    2024-11-14

标签云