欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

如何使用Go操作SQLite

 更新時(shí)間:2025年10月10日 10:27:16   作者:數(shù)據(jù)知道  
文章介紹了如何使用Go語(yǔ)言操作SQLite數(shù)據(jù)庫(kù),推薦使用github.com/mattn/go-sqlite3驅(qū)動(dòng),涵蓋了安裝驅(qū)動(dòng)、連接數(shù)據(jù)庫(kù)、表的創(chuàng)建與刪除、數(shù)據(jù)的增刪改查操作,并提供了一個(gè)完整的示例代碼,這為學(xué)習(xí)Go語(yǔ)言操作SQLite提供了一個(gè)基礎(chǔ)案例,感興趣的朋友一起看看吧

一、驅(qū)動(dòng)選擇

Go語(yǔ)言通過標(biāo)準(zhǔn)庫(kù)database/sql結(jié)合第三方驅(qū)動(dòng)可以方便地操作SQLite數(shù)據(jù)庫(kù)。Go語(yǔ)言支持SQLite的驅(qū)動(dòng)較多,但推薦使用支持database/sql接口的驅(qū)動(dòng),例如github.com/mattn/go-sqlite3。該驅(qū)動(dòng)功能完善,兼容性強(qiáng),是Go語(yǔ)言操作SQLite的主流選擇。

官方文檔:https://mattn.github.io/go-sqlite3/

二、數(shù)據(jù)庫(kù)連接

2.1 安裝驅(qū)動(dòng)

首先,通過以下命令安裝go-sqlite3驅(qū)動(dòng):

go get github.com/mattn/go-sqlite3

2.2 連接數(shù)據(jù)庫(kù)

以下代碼展示了如何連接SQLite數(shù)據(jù)庫(kù):

package main
import (
	"database/sql"
	"fmt"
	"log"
	_ "github.com/mattn/go-sqlite3"
)
func main() {
	// 打開數(shù)據(jù)庫(kù)連接,如果數(shù)據(jù)庫(kù)不存在會(huì)自動(dòng)創(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ù)庫(kù)")
}

三、表操作

3.1 創(chuàng)建表

以下代碼展示了如何創(chuàng)建一個(gè)用戶表:

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 刪除表

如果需要?jiǎng)h除表,可以使用以下代碼:

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)
}

五、完整案例

以下是一個(gè)完整的示例,包含上述所有操作:

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ù)庫(kù)")
	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語(yǔ)言通過database/sqlgo-sqlite3驅(qū)動(dòng)可以高效地操作SQLite數(shù)據(jù)庫(kù)。上述代碼涵蓋了數(shù)據(jù)庫(kù)連接、表操作以及增刪改查的完整流程,適合作為學(xué)習(xí)Go語(yǔ)言操作SQLite的基礎(chǔ)案例。

到此這篇關(guān)于如何使用Go操作SQLite的文章就介紹到這了,更多相關(guān)go 操作sqlite內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Go語(yǔ)言中讀取命令參數(shù)的幾種方法總結(jié)

    Go語(yǔ)言中讀取命令參數(shù)的幾種方法總結(jié)

    部署golang項(xiàng)目時(shí)難免要通過命令行來設(shè)置一些參數(shù),那么在golang中如何操作命令行參數(shù)呢?那么下面這篇文章就來給大家介紹了關(guān)于Go語(yǔ)言中讀取命令參數(shù)的幾種方法,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來一起看看吧。
    2017-11-11
  • 解決Golang中g(shù)oroutine執(zhí)行速度的問題

    解決Golang中g(shù)oroutine執(zhí)行速度的問題

    這篇文章主要介紹了解決Golang中g(shù)oroutine執(zhí)行速度的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-05-05
  • golang post請(qǐng)求常用的幾種方式小結(jié)

    golang post請(qǐng)求常用的幾種方式小結(jié)

    這篇文章主要介紹了golang post請(qǐng)求常用的幾種方式小結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04
  • Golang 使用Map實(shí)現(xiàn)去重與set的功能操作

    Golang 使用Map實(shí)現(xiàn)去重與set的功能操作

    這篇文章主要介紹了Golang 使用 Map 實(shí)現(xiàn)去重與 set 的功能操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04
  • 如何將Golang數(shù)組slice轉(zhuǎn)為逗號(hào)分隔的string字符串

    如何將Golang數(shù)組slice轉(zhuǎn)為逗號(hào)分隔的string字符串

    這篇文章主要介紹了如何將Golang數(shù)組slice轉(zhuǎn)為逗號(hào)分隔的string字符串問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • Go語(yǔ)言TCP從原理到代碼實(shí)現(xiàn)詳解

    Go語(yǔ)言TCP從原理到代碼實(shí)現(xiàn)詳解

    這篇文章主要為大家介紹了Go語(yǔ)言TCP從原理到代碼實(shí)現(xiàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • 從并發(fā)到并行解析Go語(yǔ)言中的sync.WaitGroup

    從并發(fā)到并行解析Go語(yǔ)言中的sync.WaitGroup

    Go?語(yǔ)言提供了許多工具和機(jī)制來實(shí)現(xiàn)并發(fā)編程,其中之一就是?sync.WaitGroup。本文就來深入討論?sync.WaitGroup,探索其工作原理和在實(shí)際應(yīng)用中的使用方法吧
    2023-05-05
  • RabbitMQ延時(shí)消息隊(duì)列在golang中的使用詳解

    RabbitMQ延時(shí)消息隊(duì)列在golang中的使用詳解

    延時(shí)隊(duì)列常使用在某些業(yè)務(wù)場(chǎng)景,使用延時(shí)隊(duì)列可以簡(jiǎn)化系統(tǒng)的設(shè)計(jì)和開發(fā)、提高系統(tǒng)的可靠性和可用性、提高系統(tǒng)的性能,下面我們就來看看如何在golang中使用RabbitMQ的延時(shí)消息隊(duì)列吧
    2023-11-11
  • 詳解Go 結(jié)構(gòu)體格式化輸出

    詳解Go 結(jié)構(gòu)體格式化輸出

    這篇文章主要介紹了Go 結(jié)構(gòu)體格式化輸出的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)go語(yǔ)言,感興趣的朋友可以了解下
    2020-08-08
  • Go基本數(shù)據(jù)類型的具體使用

    Go基本數(shù)據(jù)類型的具體使用

    本文主要介紹了Go的基本數(shù)據(jù)類型,包括布爾類型、整數(shù)類型、浮點(diǎn)數(shù)類型、復(fù)數(shù)類型、字符串類型,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-11-11

最新評(píng)論