如何使用Go操作SQLite
一、驅(qū)動選擇
Go語言通過標準庫database/sql結(jié)合第三方驅(qū)動可以方便地操作SQLite數(shù)據(jù)庫。Go語言支持SQLite的驅(qū)動較多,但推薦使用支持database/sql接口的驅(qū)動,例如github.com/mattn/go-sqlite3。該驅(qū)動功能完善,兼容性強,是Go語言操作SQLite的主流選擇。
官方文檔:https://mattn.github.io/go-sqlite3/
二、數(shù)據(jù)庫連接
2.1 安裝驅(qū)動
首先,通過以下命令安裝go-sqlite3驅(qū)動:
go get github.com/mattn/go-sqlite3
2.2 連接數(shù)據(jù)庫
以下代碼展示了如何連接SQLite數(shù)據(jù)庫:
package main
import (
"database/sql"
"fmt"
"log"
_ "github.com/mattn/go-sqlite3"
)
func main() {
// 打開數(shù)據(jù)庫連接,如果數(shù)據(jù)庫不存在會自動創(chuàng)建
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("成功連接到SQLite數(shù)據(jù)庫")
}三、表操作
3.1 創(chuàng)建表
以下代碼展示了如何創(chuàng)建一個用戶表:
func createTable(db *sql.DB) {
query := `
CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
age INTEGER
);`
_, err := db.Exec(query)
if err != nil {
log.Fatal(err)
}
fmt.Println("表創(chuàng)建成功或已存在")
}3.2 刪除表
如果需要刪除表,可以使用以下代碼:
func dropTable(db *sql.DB) {
query := "DROP TABLE IF EXISTS users;"
_, err := db.Exec(query)
if err != nil {
log.Fatal(err)
}
fmt.Println("表刪除成功")
}四、增刪改查操作
4.1 插入數(shù)據(jù)
以下代碼展示了如何向用戶表中插入數(shù)據(jù):
func insertUser(db *sql.DB, name string, age int) {
query := "INSERT INTO users (name, age) VALUES (?, ?);"
result, err := db.Exec(query, name, age)
if err != nil {
log.Fatal(err)
}
id, _ := result.LastInsertId()
fmt.Printf("插入成功,用戶ID: %d\n", id)
}4.2 查詢數(shù)據(jù)
以下代碼展示了如何查詢用戶表中的數(shù)據(jù):
func queryUsers(db *sql.DB) {
query := "SELECT id, name, age FROM users;"
rows, err := db.Query(query)
if err != nil {
log.Fatal(err)
}
defer rows.Close()
fmt.Println("用戶列表:")
for rows.Next() {
var id int
var name string
var age int
err := rows.Scan(&id, &name, &age)
if err != nil {
log.Fatal(err)
}
fmt.Printf("ID: %d, 姓名: %s, 年齡: %d\n", id, name, age)
}
}4.3 更新數(shù)據(jù)
以下代碼展示了如何更新用戶表中的數(shù)據(jù):
func updateUser(db *sql.DB, id int, newName string, newAge int) {
query := "UPDATE users SET name = ?, age = ? WHERE id = ?;"
result, err := db.Exec(query, newName, newAge, id)
if err != nil {
log.Fatal(err)
}
rowsAffected, _ := result.RowsAffected()
fmt.Printf("更新成功,影響行數(shù): %d\n", rowsAffected)
}4.4刪除數(shù)據(jù)
以下代碼展示了如何刪除用戶表中的數(shù)據(jù):
func deleteUser(db *sql.DB, id int) {
query := "DELETE FROM users WHERE id = ?;"
result, err := db.Exec(query, id)
if err != nil {
log.Fatal(err)
}
rowsAffected, _ := result.RowsAffected()
fmt.Printf("刪除成功,影響行數(shù): %d\n", rowsAffected)
}五、完整案例
以下是一個完整的示例,包含上述所有操作:
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("成功連接到SQLite數(shù)據(jù)庫")
createTable(db)
insertUser(db, "張三", 25)
insertUser(db, "李四", 30)
queryUsers(db)
updateUser(db, 1, "張三改", 26)
queryUsers(db)
deleteUser(db, 2)
queryUsers(db)
}
func createTable(db *sql.DB) {
query := `
CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
age INTEGER
);`
_, err := db.Exec(query)
if err != nil {
log.Fatal(err)
}
fmt.Println("表創(chuàng)建成功或已存在")
}
func insertUser(db *sql.DB, name string, age int) {
query := "INSERT INTO users (name, age) VALUES (?, ?);"
result, err := db.Exec(query, name, age)
if err != nil {
log.Fatal(err)
}
id, _ := result.LastInsertId()
fmt.Printf("插入成功,用戶ID: %d\n", id)
}
func queryUsers(db *sql.DB) {
query := "SELECT id, name, age FROM users;"
rows, err := db.Query(query)
if err != nil {
log.Fatal(err)
}
defer rows.Close()
fmt.Println("用戶列表:")
for rows.Next() {
var id int
var name string
var age int
err := rows.Scan(&id, &name, &age)
if err != nil {
log.Fatal(err)
}
fmt.Printf("ID: %d, 姓名: %s, 年齡: %d\n", id, name, age)
}
}
func updateUser(db *sql.DB, id int, newName string, newAge int) {
query := "UPDATE users SET name = ?, age = ? WHERE id = ?;"
result, err := db.Exec(query, newName, newAge, id)
if err != nil {
log.Fatal(err)
}
rowsAffected, _ := result.RowsAffected()
fmt.Printf("更新成功,影響行數(shù): %d\n", rowsAffected)
}
func deleteUser(db *sql.DB, id int) {
query := "DELETE FROM users WHERE id = ?;"
result, err := db.Exec(query, id)
if err != nil {
log.Fatal(err)
}
rowsAffected, _ := result.RowsAffected()
fmt.Printf("刪除成功,影響行數(shù): %d\n", rowsAffected)
}總結(jié):Go語言通過database/sql和go-sqlite3驅(qū)動可以高效地操作SQLite數(shù)據(jù)庫。上述代碼涵蓋了數(shù)據(jù)庫連接、表操作以及增刪改查的完整流程,適合作為學習Go語言操作SQLite的基礎案例。
到此這篇關于如何使用Go操作SQLite的文章就介紹到這了,更多相關go 操作sqlite內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
GO中高效的將int轉(zhuǎn)換為string的方法與源碼
本文將從逐步介紹幾種在?Go?中將?int?轉(zhuǎn)換為?string?的常見方法,并重點剖析這幾種方法在性能上的特點,另外,還會重點介紹?FormatInt?高效的算法實現(xiàn),需要的朋友可以參考下2024-01-01
Go語言開發(fā)框架反射機制及常見函數(shù)示例詳解
這篇文章主要為大家介紹了Go語言開發(fā)框架反射機制及常見函數(shù)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-09-09

