安裝gcc 使用 go-sqlite3 Golang 鏈接 sqlite3


 gcc 安裝非常重要,golang的好多項目大部分都是go c混編。

 

先安裝gcc,需要翻牆,為了方便使用我上傳到百度雲了。

 

鏈接:https://pan.baidu.com/s/17NbFOizhext_YINOz-NU7A
提取碼:3jb8

 

安裝步驟  百度雲下載,解壓到你喜歡的磁盤。

 

下面就是添加環境變量,

 

添加新變量  MinGW , 這個名字是我自己把解壓的改了,解壓后是 名字是 mingw64,

然后把變量名加到 Path , %MinGW%\bin

 

 

 

 

測試是否安裝成功

gcc -V

 成功了 就是這樣

 

 下面就是正式開始使用 go-sqlite3 ,我們不用下載和安裝sqlite3, 這個庫就是嵌入式的數據庫。

 

非常建議大家使用 go mod  比go get 什么省事太多,go get 遇到被牆,翻牆也不行,/x/ 包從goole 遷到 github 了 但是內部路徑沒有改,mod 有一個開源項目

https://www.goproxy.io/ 就是這個項目 可以看一下,省好多時間。

 

怎么 使用 mod ,官網少了雙引號,會報錯,不知道為什么沒有改。

// powershell 下用這兩個
GO111MODULE=on

GOPROXY="https://goproxy.io"

 開啟代理后,直接在import 下寫要引入的庫,然后golad會提示紅色,不用管。也可以按照編輯器說的做。

但是建議

 

 

import (
	"database/sql"
	_ "github.com/mattn/go-sqlite3"
	"log"
)

 

 

 

這樣一會就安裝好,也添加到 go.sum  go.mod ,都2019 年了 使用 mod 嘍。

 

安裝好以后下面是參考代碼。只是做測試,以后擴展也方便。項目目錄

盡力 mvc 開發結構

下面是個個文件的代碼

initSqlit.go

package model

import (
	"database/sql"
	_ "github.com/mattn/go-sqlite3"
	"log"
)

type SQLiteDB struct {
	Sqlite3 *sql.DB
}

var SQLITE *SQLiteDB

func InitDB() {
	SQLITE = &SQLiteDB{
		Sqlite3: ConnectDB(),
	}
}
func ConnectDB() *sql.DB {
	db, err := sql.Open("sqlite3", "foo.db")
	if err != nil {
		log.Fatal("鏈接錯誤")
	}

	return db
}

 

 sqlite3.go

package repositories

import (
	"database/sql"
	"fmt"
	"leetcode/sqlite3_m/model"
	"log"
	"time"
)

func checkErr(err error) {
	if err != nil {
		fmt.Println("Prepare Error  ", err)
	}
}

type RepositoriesSqlite struct {
	sqlite *sql.DB
}

func NewRepositoriesSqlite() *RepositoriesSqlite {
	return &RepositoriesSqlite{sqlite: model.SQLITE.Sqlite3}
}

// Ping sql
func (r *RepositoriesSqlite) Ping() {
	if err := r.sqlite.Ping(); err != nil {
		log.Fatal(err)
	}
	fmt.Println("PING OK")
}

// 創建表
func (r *RepositoriesSqlite) Create() {
	sql := r.sqlite
	sqlStmt := `
	create table userinfo (username text , departname text , created text);
	`
	_, err := sql.Exec(sqlStmt)
	checkErr(err)
	//fmt.Println(f)
}

// 插入數據
func (r *RepositoriesSqlite) Insert() {
	sql := r.sqlite
	stmt, err := sql.Prepare("INSERT INTO userinfo(username, departname, created) values(?,?,?)")
	checkErr(err)
	res, err := stmt.Exec("我的名字", "IEC118", time.Now())
	checkErr(err)
	_, err = res.LastInsertId()
	checkErr(err)
	//fmt.Println("ID  ...  ",id)
}

// 查詢數據
func (r *RepositoriesSqlite) Query() {
	sql := r.sqlite
	rows, err := sql.Query("SELECT * FROM userinfo")
	checkErr(err)
	for rows.Next() {
		var username string
		var department string
		var created string
		err = rows.Scan(&username, &department, &created)
		checkErr(err)

		fmt.Print(username, "  ")
		fmt.Print(department, "  ")
		fmt.Print(created, "  \n")
	}
}

// 刪除數據

func(r *RepositoriesSqlite) Delete() {
	sql := r.sqlite
	stmt,err := sql.Prepare("DELETE  FROM userinfo WHERE username = ?")
	if err != nil {
		log.Fatal(err)
	}
	result ,err :=stmt.Exec("astaxie")
	affectNum, err := result.RowsAffected()
	if err != nil {
		log.Fatal(err)
	}
	fmt.Println("delete affect rows is ", affectNum)

}

// 數據更新

func (r *RepositoriesSqlite) Update(){
	sql := r.sqlite
	stmt , err := sql.Prepare("UPDATE userinfo SET created = ? WHERE username = ?")
	if err != nil{
		log.Fatal(err)
	}
	result , err :=stmt.Exec("2016-09-7","我的名字")
	affectNum, err := result.RowsAffected()
	if err != nil {
		log.Fatal(err)
	}
	fmt.Println("update affect rows is ", affectNum)
}

 main.go

package main

import (
	_ "github.com/mattn/go-sqlite3"
	"leetcode/sqlite3_m/model"
	"leetcode/sqlite3_m/repositories"
)

func main() {
	model.InitDB()
	s := repositories.NewRepositoriesSqlite()
	s.Ping()
	//s.Create()
	//s.Insert()
	//s.Delete()
	//s.Update()
	//s.Query()
}

 沒做測試,也不知道測試什么。

大概就是這樣,還有什么問題可以留言聯系我。沒畢業的學生,不對的地方,和我說一下,謝謝。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM