使用 Go 语言操作 SQLite 数据库的详细指南
在本篇文章中,我们将介绍如何在 Go 语言中使用 SQLite 数据库。我们将从安装和使用 SQLite 驱动包开始,逐步介绍如何创建数据库连接,执行 SQL 查询,处理返回的数据,以及关闭数据库连接。
1. 安装 SQLite 驱动
首先,我们需要在 Go 环境里安装 SQLite 的驱动程序。可以使用以下命令进行安装:
go get github.com/mattn/go-sqlite3
2. 创建数据库连接
使用 sql.Open()
函数可以连接到数据库。它需要两个参数:驱动名称和数据源名称。以下是一个示例:
package main
import (
"database/sql"
"fmt"
_ "github.com/mattn/go-sqlite3"
)
func main() {
db, err := sql.Open("sqlite3", "./test.db")
if err != nil {
fmt.Println(err)
return
}
defer db.Close()
}
3. 执行 SQL 查询
连接建立后,可以使用 db.Exec()
来执行 SQL 查询。例如,创建一个表:
stmt, err := db.Prepare("CREATE TABLE IF NOT EXISTS userinfo(username TEXT, departname TEXT, created DATE)")
if err != nil {
log.Fatalln(err)
}
_, err = stmt.Exec()
if err != nil {
log.Fatalln(err)
}
4. 插入数据
通过 stmt.Exec()
可以向表中插入数据:
stmt, err := db.Prepare("INSERT INTO userinfo(username, departname, created) values(?,?,?)")
if err != nil {
log.Fatalln(err)
}
res, err := stmt.Exec("astaxie", "tech", "2019-12-09")
if err != nil {
log.Fatalln(err)
}
id, err := res.LastInsertId()
if err != nil {
log.Fatalln(err)
}
fmt.Println(id)
5. 查询数据
使用 db.Query()
可以执行 SQL 查询并获取结果。例如,查询所有数据:
rows, err := db.Query("SELECT * FROM userinfo")
if err != nil {
log.Fatalln(err)
}
columns, err := rows.Columns()
if err != nil {
log.Fatalln(err)
}
values := make([]sql.RawBytes, len(columns))
for i := range values {
values[i] = new(sql.RawBytes)
}
var value string
for rows.Next() {
err = rows.Scan(values...)
if err != nil {
log.Fatalln(err)
}
for _, val := range values {
if val == nil {
value = "NULL"
} else {
value = string(*val)
}
fmt.Println(value)
}
}
if err = rows.Err(); err != nil {
log.Fatalln(err)
}
6. 更新数据
更新数据的操作使用 db.Exec()
来执行 SQL 语句:
stmt, err := db.Prepare("update userinfo set username=? where uid=?")
if err != nil {
log.Fatalln(err)
}
updateRes, err := stmt.Exec("astaxieupdate", lastInsertID)
if err != nil {
log.Fatalln(err)
}
affect, err := updateRes.RowsAffected()
if err != nil {
log.Fatalln(err)
}
fmt.Println(affect)
7. 删除数据
删除数据的操作也类似,通过 db.Exec()
执行 SQL 语句:
stmt, err := db.Prepare("DELETE FROM userinfo WHERE uid=?")
if err != nil {
log.Fatalln(err)
}
delRes, err := stmt.Exec(lastInsertID)
if err != nil {
log.Fatalln(err)
}
affect, err := delRes.RowsAffected()
if err != nil {
log.Fatalln(err)
}
fmt.Println(affect)
总结
通过以上步骤,你可以在 Go 语言中操作 SQLite 数据库。本文涵盖了从安装驱动到创建数据库连接、执行查询、插入、更新和删除数据的完整流程,帮助你轻松地将 SQLite 集成到 Go 应用中。