Go連接并操作SQLite數(shù)據(jù)庫(kù)基本步驟
安裝 SQLite 驅(qū)動(dòng)
首先,我們需要在 Go 環(huán)境里安裝 SQLite 的驅(qū)動(dòng)程序,可以使用以下命令進(jìn)行安裝:
go get github.com/mattn/go-sqlite3

創(chuàng)建數(shù)據(jù)庫(kù)連接
接下來(lái),使用 sql.Open() 函數(shù),我們可以連接到數(shù)據(jù)庫(kù)。期望的兩個(gè)參數(shù)是驅(qū)動(dòng)名稱和數(shù)據(jù)源名稱。 比如:
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)
}
defer db.Close()
}
執(zhí)行 SQL 查詢
建立連接之后,我們可以使用 db.Exec() 來(lái)執(zhí)行 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)
}
插入數(shù)據(jù)
我們可以通過(guò)以下方式向表中插入數(shù)據(jù):
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)
查詢數(shù)據(jù)
類似地,我們可以使用 db.Query() 來(lái)執(zhí)行 SQL 查詢并獲取結(jié)果。下面是一個(gè)例子:
rows, err := db.Query("SELECT * FROM userinfo")
columns, err := rows.Columns()
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)
}更新數(shù)據(jù)
更新數(shù)據(jù)的操作和插入數(shù)據(jù)類似,都是利用 db.Exec() 來(lái)執(zhí)行 SQL 語(yǔ)句:
stmt, err := db.Prepare("update userinfo set username=? where uid=?")
if err != nil {
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)
刪除數(shù)據(jù)
最后,刪除數(shù)據(jù)操作與插入和更新數(shù)據(jù)操作類似,同樣利用 db.Exec() 來(lái)執(zhí)行 SQL 語(yǔ)句:
stmt, err := db.Prepare("DELETE FROM userinfo WHERE uid=?")
if err != nil {
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 語(yǔ)言中操作 SQLite 數(shù)據(jù)庫(kù)的基本步驟,更多關(guān)于Go連接操作SQLite數(shù)據(jù)庫(kù)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Go語(yǔ)言Mock單元測(cè)試的實(shí)現(xiàn)示例
Go語(yǔ)言Mock單元測(cè)試通過(guò)模擬外部依賴實(shí)現(xiàn)隔離測(cè)試,解決傳統(tǒng)測(cè)試中的環(huán)境依賴、結(jié)果不穩(wěn)定和效率問(wèn)題,感興趣的可以了解一下2025-11-11
一文教你學(xué)會(huì)Go中singleflight的使用
緩存在項(xiàng)目中使用應(yīng)該是非常頻繁的,提到緩存只要了解過(guò)?singleflight?,基本都會(huì)用于緩存實(shí)現(xiàn)的一部分吧,下面就跟隨小編一起來(lái)學(xué)習(xí)一下singleflight的使用吧2024-02-02
用go gin server來(lái)做文件上傳服務(wù)
今天小編就為大家分享一篇關(guān)于用go gin server來(lái)做文件上傳服務(wù),小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2019-04-04
Go基于struct?tag實(shí)現(xiàn)結(jié)構(gòu)體字段級(jí)別的訪問(wèn)控制
本文將會(huì)基于這個(gè)主題展開,討論Go中的結(jié)構(gòu)體tag究竟是什么,我們?cè)撊绾卫盟?另外,文末還提供了一個(gè)實(shí)際案例,實(shí)現(xiàn)結(jié)構(gòu)體字段級(jí)別的訪問(wèn),幫助我們進(jìn)一步提升對(duì)struct tag的理解2024-02-02

