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開(kāi)源Hugo站點(diǎn)渲染之模板詞法解析
這篇文章主要為大家介紹了go開(kāi)源Hugo站點(diǎn)渲染之模板詞法解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-02-02Golang?Mutex錯(cuò)過(guò)會(huì)后悔的重要知識(shí)點(diǎn)分享
互斥鎖?Mutex?是并發(fā)控制的一個(gè)基本手段,是為了避免并發(fā)競(jìng)爭(zhēng)建立的并發(fā)控制機(jī)制,本文主要為大家整理了一些Mutex的相關(guān)知識(shí)點(diǎn),希望對(duì)大家有所幫助2023-07-07go語(yǔ)法入門(mén)匿名函數(shù)定義及使用示例詳解
這篇文章主要為大家介紹了go語(yǔ)法入門(mén)匿名函數(shù)定義及使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-09-09Go文件操作(新建打開(kāi)寫(xiě)入讀取刪除關(guān)閉)學(xué)習(xí)筆記
這篇文章主要為大家介紹了Go文件操作(新建打開(kāi)寫(xiě)入讀取刪除關(guān)閉)學(xué)習(xí)筆記,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2024-01-01golang中切片copy復(fù)制和等號(hào)復(fù)制的區(qū)別介紹
這篇文章主要介紹了golang中切片copy復(fù)制和等號(hào)復(fù)制的區(qū)別,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-04-04Golang?json?庫(kù)中的RawMessage功能原理
今天我們來(lái)學(xué)習(xí)一個(gè) Golang 官方 json 庫(kù)提供了一個(gè)經(jīng)典能力RawMessage,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-05-05Go接口構(gòu)建可擴(kuò)展Go應(yīng)用示例詳解
本文深入探討了Go語(yǔ)言中接口的概念和實(shí)際應(yīng)用場(chǎng)景。從基礎(chǔ)知識(shí)如接口的定義和實(shí)現(xiàn),到更復(fù)雜的實(shí)戰(zhàn)應(yīng)用如解耦與抽象、多態(tài)、錯(cuò)誤處理、插件架構(gòu)以及資源管理,文章通過(guò)豐富的代碼示例和詳細(xì)的解釋,展示了Go接口在軟件開(kāi)發(fā)中的強(qiáng)大功能和靈活性2023-10-10